webForumDet fria alternativet

Sql, Join.

15 svar · 496 visningar · startad av Poseidon

PoseidonMedlem sedan jan. 200370 inlägg
#1

Tjena alla glada.

nu har jag lite problem. allt fungerar som det ska ända tills jag villa
loopa från tabellen ForumLista då får jag fel.

fältet är rätt angivet om jag inte loopar men när jag loopar hittar den
ej fältet längre.. why?

nu vill jag då loopa fram från den andra tabellen men får inte..
hur ska det se ut? har provet med: 'Do Until objRS("ForumLista").Eof'

men ingen av mina försöka har lyckats... den säger att den inte hittar fältet vilket
garanterat finns då jag kan hämta enstaka men ej loopa med RecordSet.

Kod:
--------------------------------------------------------------------------------

strSQL = "Select UserInfo.*, ForumLista.ForumID As ForumID From UserInfo, ForumLista "&_
"Where UserInfo.UserID ="& qID

Do Until objRS.Eof
Response.Write( "<option value='8'>Forum "& objRS("ForumID") &"</option>")
objRS.MoveNext : Loop

--------------------------------------------------------------------------------

Tacksam för hjälp!

/Markus

aasahMedlem sedan mars 20033 451 inlägg
#2

Vad är objRS? Ligger inte problemet i koden för utskrift från ditt applikationsprogram då? Vad händer om du helt enkelt skriver ut din resultattabell, blir det inte rätt då?

PoseidonMedlem sedan jan. 200370 inlägg
#3

förstår inte alls hur du menar.

objRS är mitt RecordSet som jag vill ska loopa från tabellen ForumLista medans den ska hämta specifik post från UserInfo..

det fungerar jättebra om jag inte försöker loopa, min fråga är:

Hur ska det se ut om jag loopar i från tabellen "ForumLista"??

Är det ingen som har kunskapen att lösa denna fråga??

@ndersMedlem sedan juni 200026 914 inlägg
#4

Borde du inte joina ihop tabellerna också?

strSQL = "Select UserInfo.*, ForumLista.ForumID As ForumID From UserInfo, ForumLista "&_ 
"Where UserInfo.UserID ="& qID & " [b]AND Forumlista.någotfält = UserInfo.någotfält[/b]"
[b]'öppna recordset[/b]
Set objRS = objConn.Execute(strSQL)

Do Until objRS.Eof 
Response.Write( "<option value='8'>Forum "& objRS("ForumID") &"</option>") 
objRS.MoveNext : Loop

Vad får du för felmeddelande när du kör koden?

Mvh

PoseidonMedlem sedan jan. 200370 inlägg
#5

nope, har ingen nytta av att joina dem...

här kommer all kod om någon lyckas lösa det...
vill ha endast en SQL-sats!


Set objConn = 	Server.CreateObject("ADODB.Connection")
					objConn.Open "Provider=Microsoft.Jet.Oledb.4.0; Data Source ="& Server.Mappath("db/db.mdb")	

			strSQL = "Select UserInfo.*, ForumLista.ForumID As ForumID From UserInfo, ForumLista "&_ 
					 "Where UserInfo.UserID ="& qID
			
			Set objRS = objConn.Execute(strSQL)
							
							
		
Response.Write(	"<table cellpadding='0' cellspacing='0'><tr>"&_
		"<td valign='top' class='user1'><b>nick:</b></td>"&_
		"<td valign='top' class='user2'>"& objRS("username") &"</td>"&_
		"<td valign='top' class='user1' style='padding-left:10px;'><b>status:</b></td>"&_
		"<td valign='top' class='user2'>"&_
		"	<select name='status'>"&_
		"		<option value='Forumledare'>Forumledare</option>"&_
		"		<option value='Moderator'>Moderator</option>"&_
		"		<option value='User'>User</option/>"&_
		"	</select>"&_
		"	<select name='forum'>")
		
		Do Until objRS("ForumLista").Eof
Response.Write( "<option value='"& objRS("ForumId") &"'>Forum "& objRS("ForumID") &"</option>")
		objRS.MoveNext : Loop

det finns mycket mer kod men det räcker med detta.. ;)
har också provat utan 'objRS("ForumLista").Eof...

PoseidonMedlem sedan jan. 200370 inlägg
#6

lite tydligare..

jag skriver lite tydligare här..

Jav vill loopa från en tabell men hämta enbart en post från den andra tabellen.....

@ndersMedlem sedan juni 200026 914 inlägg
#7

Vad innehåller tabellerna? Du måste nog köra två SQL-frågor. Du kommer att få en herrans massa poster eftersom SQL-frågan kommer returnera alla olika unika kombinationer.

Du får nog tänka om.

(Det verkar inte vara en post du vill hämta, utan ett fält. Ställ gärna frågan direkt i Access-programmet, så ser du vilket härke till resultat du får tillbaka.)

Mvh

aasahMedlem sedan mars 20033 451 inlägg
#8

Alltså, jag förstår fortfarande inte vad du vill.

Jav vill loopa från en tabell men hämta enbart en post från den andra tabellen.....

På vilket sätt är den ensamma posten relaterad till den tabell du loopar? Och exakt vad är det egentligen som loopar? objRS är ingenting som ingår i SQL, väl? Så vilket programspråk/script använder du för att prata med databasen? Jag kan inte avgöra det på de rader du postat här.

PoseidonMedlem sedan jan. 200370 inlägg
#9

SQL för att snacka med databasen.. objRS (recordset) i ASP för att visa informationen för användaren...

databaserna är ej relaterade i detta fallet.. vad jag undrade vad om man på något sätt kunde skriva ut specifik post från en tabell och loopa ett fält från en annan tabell??

tydligen går det ej då...

har då en annan fråga....

strSQL = "Select UserInfo.*, Max(ForumLista.ForumID) As ForumID From UserInfo, ForumLista "&_ 
					 "Where UserInfo.UserID ="& qID

fel:
Du försökte köra en fråga med en mängdfunktion som inte innehöll det angivna uttrycket 'UserId'.

förstår felet, men finns det inget sätt jag kan göra på så att jag
slipper ha två SQL-satser??

det enda jag vill ha från tabell2 dvs. ForumLista är hur många
ID det finns.. har också provat med Count..

annars får jag köra med 2sql satser....

aasahMedlem sedan mars 20033 451 inlägg
#10

Poseidon skrev:

SQL för att snacka med databasen.. objRS (recordset) i ASP för att visa informationen för användaren...

strSQL = "Select UserInfo.*, Max(ForumLista.ForumID) As ForumID
From UserInfo, ForumLista "&_ 
"Where UserInfo.UserID ="& qID

...det enda jag vill ha från tabell2 dvs. ForumLista är hur många
ID det finns.. har också provat med Count..

Första frågan: ASP förklarar saken, jag vet inget om ASP.

Andra frågan:
Det du gör nu är att gå en oerhörd omväg. Först parar du ihop all info för varje rad i UserInfo med varje rad i ForumId. Om du har m medlemmar som matchar userID och f forum hämtar du alltså infon från m*f rader. Varför? Jo för att få reda på max forumID vilket kräver genomgång av endast f poster och utskrift av alla medlemmar vilket är en genomgång av m poster. Egentlig tidsåtgång m + f << m*f . Använd två frågor i stället.

PoseidonMedlem sedan jan. 200370 inlägg
#11

löste det nu och koden ser ut såhär...

strSQL = "Select UserInfo.*, ForumLista.ForumID As ForumID
From UserInfo, ForumLista "&_ 
"Where UserInfo.UserID ="& qID &" Order By ForumLista.ForumId Desc"

jag trodde att den hämtade alla fälten i tabellen UserId där qID stämde.

och att den hämtar allt från fältet ForumId från tabellen ForumLista och sorterar den efter högsta värdet...

kan du förklara en gång till utifrån den koden jag visade nu vad som är onödigt med koden???

PoseidonMedlem sedan jan. 200370 inlägg
#12

nu får jag fram alla idna

For i = 1 To objRS("ForumId")
Response.Write( "<option value='"& i &"'>Forum "& i &"</option>")
Next

aasahMedlem sedan mars 20033 451 inlägg
#13

Poseidon skrev:

jag trodde att den hämtade alla fälten i tabellen UserId där qID stämde.

Detta är riktigt, jag skrev fel ovan ska omedelbart ändra efter detta svar.

Poseidon skrev:

löste det nu och koden ser ut såhär...

strSQL = "Select UserInfo.*, ForumLista.ForumID As ForumID
From UserInfo, ForumLista "&_ 
"Where UserInfo.UserID ="& qID &" 
Order By ForumLista.ForumId Desc"

...och att den hämtar allt från fältet ForumId från tabellen ForumLista och sorterar den efter högsta värdet... kan du förklara en gång till utifrån den koden jag visade nu vad som är onödigt med koden???

Om UserInfo.userID är unikt så kommer ditt resultat inte att generera fler rader eftersom m*f = 1*f = f. Om det inte är unikt så får du ut samma info om och om igen i olika konstellationer mot foruminfon. Din ändrade fråga tar inte ut maxvärdet på forumID, den skriver ut alla ForumID. Låt oss anta att userID är unikt. Exempel:
UserInfo
userID | namn | epost
1 | Bo Berg | bo@telia.se
2| Ia Nord | ia@bo.se

ForumLista
ForumID | namn | senaste postare | antal inlägg | datum för senaste inlägg
1 | Film | 1 | 20030219
2 | TV | 1 | 20030319
3 | Såpor | 1 | 20030419
4 | Teater | 2 | 20030501

Ia Nord har inte postat någon annanstans än i Teaterforumet. Det userId du får in är 2, dvs Ias. Den info din sats skriver ut är följande:
2| Ia Nord | ia@bo.se | 1 | Film | 1 | 20030219
2| Ia Nord | ia@bo.se | 2 | TV | 1 | 20030319
2| Ia Nord | ia@bo.se | 3 | Såpor | 1 | 20030419
2| Ia Nord | ia@bo.se | 4 | Teater | 2 | 20030501
eftersom det inte finns någon koppling mellan UserInfo och ForumLista.

Då kan man fråga sig två saker: Dels varför du vill ha ut Ias info fyra gånger när det räcker med en? Dels varför det är intressant att koppla ihop Ias info med de tre forum som hon inte har postat i?

PoseidonMedlem sedan jan. 200370 inlägg
#14

anledning till det är att jag vill endast ha en SQL-sats.. och att
jag inte visste om att jag hämtade onödigt med information..

så det finns inget sätt där jag kan köra en SQL-sats men slippa
hämta den överflödiga informationen??

hur mycket mer kräver det av servern?? när det bara rör sig om
4 ForumId kan det väl inte ha någon större betydelse??

aasahMedlem sedan mars 20033 451 inlägg
#15

Poseidon skrev:

  1. så det finns inget sätt där jag kan köra en SQL-sats men slippa hämta den överflödiga informationen??

  2. hur mycket mer kräver det av servern?? när det bara rör sig om
    4 ForumId kan det väl inte ha någon större betydelse??

  1. Nej.
  2. Hur många forumID det rör sig om beror ju på hur många forum DU har. I mitt exempel var det 4, du kanske har > 10. På webForum skulle det bli rätt många... Förmodligen har det ingen större betydelse, men din fråga blir ologisk och det blir svårt för någon annan att fatta varför du gör som du gör... VARFÖR slå ihop dem? Frågorna har ju inget med varann att göra?
PoseidonMedlem sedan jan. 200370 inlägg
#16

varför ha fler frågor än nödvändigt?? =)

förstår vad du menar, men eftersom det ligger mitt i en annan så
måste jag öppna två recordset och det är det jag vill komma från.

jag får göra lite mätningar och se hur mycket det drar ner i tid..

tackar för hjälpen..

Genererad på 377 ms · cache AV · v20260730165559-full.f96bc7eb