webForumDet fria alternativet

Kombinera två olika tabeller

ASP

5 svar · 411 visningar · startad av M.Cheraghi

Medlem sedan juli 20015 107 inlägg
Frågan#1

Jag har två tabeller

tblUser
username (användarnamn)
online_status (online/offline)

tblFriend
whos (vems kompis, dvs personen som är inloggad session("username"))
friend (kompisens användarnamn)

Dvs, jag vill loopa ut allt från tblFriend där whos = session("username") och där man jämnför 'friend' mot username i tblUser ifall online_status är satt som online, ska han skrivas ut, annars skall han inte visas. det hela skall sorteras efter 'Friend' i tblFriend
om det är helt tomt ska det stå "Du har inga komtakter online"

Jag har ingen aning om hur jag ska lösa detta på ett smidigt sätt utan 45 SQL satser.
Kan innerjoin vara ett alternativ? isåfall hur ska man gå tillväga då, har aldrig hållt på med join, och efter diverse sökningar har jag inte förstått så mycket heller

red: det borde nu i eftertanke ha postats i SQL forumet. :| my bad.

Medlem sedan juni 200032 967 inlägg
#2

Du borde kunna göra någonting sånt härnt:

strSQL = "SELECT tblFriend.* FROM tblFriend INNER JOIN tblUser ON tblFriend.friend = tblUser.username WHERE whos='" & Session("username") & "' AND online_status = 'online'
set objRS = objConn.Execute(strSQL)
if objRS.EOF Then
    response.write "Du har inga kontakter online, för böveln!"
end if

While not objRS.EOF
    Response.write objRS("friend") & "<br>"
    objRS.Movenext
Wend

Men. Det vore bättre om du såg till att knyta ihop dina tabeller på id-nummer istället för namn. Vad händer om någon byter namn? Dessutom: det verkar onödigt att lagra strängarna online/offline i online-statusfältet. Det borde väl räcka alldeles utmärkt att lagra 1 eller 0 i ett talfält?

Mvh

Medlem sedan juli 20015 107 inlägg
#3

@nders skrev:

Du borde kunna göra någonting sånt härnt:

strSQL = "SELECT tblFriend.* FROM tblFriend INNER JOIN tblUser ON tblFriend.friend = tblUser.username WHERE whos='" & Session("username") & "' AND online_status = 'online'
set objRS = objConn.Execute(strSQL)
if objRS.EOF Then
    response.write "Du har inga kontakter online, för böveln!"
end if

While not objRS.EOF
    Response.write objRS("friend") & "<br>"
    objRS.Movenext
Wend

Men. Det vore bättre om du såg till att knyta ihop dina tabeller på id-nummer istället för namn. Vad händer om någon byter namn? Dessutom: det verkar onödigt att lagra strängarna online/offline i online-statusfältet. Det borde väl räcka alldeles utmärkt att lagra 1 eller 0 i ett talfält?

Mvh

Tack! :)
Det fungerade alldeles utmärkt, men jag vill i loopen skriva ut tabellen 'online_status_extended'
Försökte med <%=RSfriend("online_status_extended")%> men det ville inte fungera. Något sött tips?

här byts inga användarnamn ;) och visst kan man lagra 1/0 istället för online/offline men det gör väl ingen större skillnad?

Medlem sedan juni 200032 967 inlägg
#4

Enligt tabelldefinitionerna ovan finns inget sådant fält. ;)

Du måste ha med fältet i SELECT-listan om du ska kunna använda dess värde senare.

Mvh

Medlem sedan juli 20015 107 inlägg
#5

där ser man.
löste det med

<%
strSQL = "SELECT tblFriend.*,tblUser.online_status_extended FROM tblFriend INNER JOIN tblUser ON tblFriend.friend = tblUser.username WHERE whos='" & Session("username") & "' AND online_status = 'online'"
set RSfriend = Conn.Execute(strSQL)
%>

Tack @nders :)

Medlem sedan juni 200032 967 inlägg
#6

Waahr zå goodh. :-)

258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)