Någon som har lust att förbättra min "kompis lista"?
Skulle vara hemskt tacksam om jag kunde få bort lite IF satser och en o annan RecSet :)
<%@ LANGUAGE="VBSCRIPT" %>
<% Response.Expires=-1%>
<% Response.Buffer = True %>
<%
username=session("username")
Set RecSet = Connect.Execute("SELECT * FROM kompis WHERE namn='" & username & "' AND godkand='Ja' OR namn2='" & username & "' AND godkand='Ja'")
If RecSet.EOF Then
response.write("<br>Din kompis lista är tom<br><br>")
Else
response.write("<table border='0' cellpadding='0' cellspacing='0' width='100%'>" & _
"<tr><td width='100%' colspan='3'><img border='0' src='bilder/polare-on.gif' width='79' height='10'></td></tr>")
countF=0
Do Until RecSet.EOF
countF=countF+1
if RecSet("namn")=username then
Set RecSet2 = Connect.Execute("SELECT * FROM members WHERE username='" & RecSet("namn2") & "' AND status='online'")
If not RecSet2.EOF Then
%>
<tr>
<td width="88%"> <a href="plejs.asp?se=<%=RecSet("namn2")%>"><%=RecSet("namn2")%></a></td>
<td width="7%">
<a href="plejs/gastbok.asp?se=<%=RecSet("namn2")%>">
<img src="bilder/lillegb.gif" alt="Gå till gästboken" border="0" width="14" height="10"></a>
</td>
<td width="5%">
<a href="mail/skapamail.asp?till=<%=RecSet("namn2")%>&direkt=ja">
<img src="bilder/brev.gif" alt="Skicka ett meddelande till <%=RecSet("namn2")%>" border="0" width="14" height="10"></a>
</td>
</tr>
<%
End If
RecSet2.Close
Set RecSet2 = Nothing
else if RecSet("namn2")=username then
Set RecSet2 = Connect.Execute("SELECT * FROM members WHERE username='" & RecSet("namn") & "' AND status='online'")
If not RecSet2.EOF Then
%>
<tr>
<td width="88%"> <a href="plejs.asp?se=<%=RecSet("namn")%>"><%=RecSet("namn")%></a></td>
<td width="7%">
<a href="plejs/gastbok.asp?se=<%=RecSet("namn")%>">
<img src="bilder/lillegb.gif" alt="Gå till gästboken" border="0" width="14" height="10"></a>
</td>
<td width="5%">
<a href="mail/skapamail.asp?till=<%=RecSet("namn")%>&direkt=ja">
<img src="bilder/brev.gif" alt="Skicka ett meddelande till <% =RecSet("namn")%>" border="0" width="14" height="10"></a>
</td>
</tr>
<%
RecSet2.Close
Set RecSet2 = Nothing
End If
end if
end if
RecSet.MoveNext
Loop
Response.Write("</table>")
If countF="0" Then
Response.Write("<i>Inga polare online</i>")
End If
End If
RecSet.Close : Set RecSet = nothing
%>
kollade inte igenom så noga, men du borde kunna lösa det med
Set RecSet= Connect.Execute("SELECT kompis.namn2,members.namn,members.status FROM kompis INNER JOIN members ON members.namn = kompis.namn2 WHERE kompis.namn='" & username & "' AND godkand= 'Ja' OR namn2='" & username & "' AND godkand='Ja' ORDER BY members.status")
If RecSet.EOF Then
Response.Write("<br>Din kompislista är tom!<br><br>")
Else
Do until RecSet.EOF
Response.Write RecSet("status") &" - <a href=""plejs.asp?se="& RecSet("namn2") &""">"& RecSet("namn2") &"</a>"
RecSet.MoveNext
Loop
End If
RecSet.Close : Set RecSet = nothing
Så kanske, nu är jag inte så jätte inställd i hur din databas ser ut, och jag antar att namn2(i kompis) är samma som finns i namn(i members). Det skulle iofs vara bättre att spara id, och på så sätt länka dem.
Koden är också helt otestat, och kan behöva modifieras lite, men förhoppningsvis ska den funka bättre.
Funkar bra fast ett litet problem, den loopar ut även dom som är offline. Alltså den ska kolla i members.status om personen är online och bara loopa ut dom som är online.
Din loop hämtar även ut sitt egna namn, ibland hamnar man som namn2 och ibland som namn (beroende på vem som startade relationen).
för att bara hämta dem som är online kan du lägga till "AND members.status = 'online'
Nu vet jag inte riktigt exakt vad du vill göra. Men för att hämta ut alla kompisar som "namn" har som är online, kan man göra så här:
SELECT kompis.namn2,members.status FROM kompis INNER JOIN members ON members.namn = kompis.namn2 WHERE kompis.namn='" & username & "' AND kompis.godkand= 'Ja' AND members.status ='online'")
Fast du borde i fortsättningen skapa bättre namn på tabellerna(namn,namn2) kan bli lite förvirrande, speciellt för utomstående.
Det vore bättre att dels spara personerna med deras ID(istället för namn) samt att döpa tabellerna till "mittID" o "kompisID", eller liknande.
Det som blir lurigt med den SQL satsen är att det är inte alltid som ens egna namn(ID) hamnar i kolumnen namn, beroende på vem som startar relationen. Om t.ex. jag startar den så hamnar mitt ID i kolumnen namn och om någon annan startar den så hamnar ju mitt namn i kolumnen namn2.
Är helt nollställd på hur jag ska göra då.
Målar du inte in dig i ett hörn nu? Poängen med att lista 'mina kompisar' är väl att jag ska få en lista med dom jag har markerat som kompis. Att sedan andra kan ha valt att vara kompis med mig och jag inte valt att vara kompis med dom ska väl inte innebära att jag vill få upp dessa namn, när jag listar mina kompisar?
Jo, men jag antar att det är den som vill bli kompis, som måste få ett godkännande. Men om du verkligen vill ha upp alla så kanske detta kan fungera.
SELECT k.namn2, m.status
FROM kompis k
INNER JOIN members m
ON m.namn = k.namn2
WHERE k.namn = '[i]username[/i]'
AND k.godkand = 'Ja'
AND m.status = 'online'
UNION SELECT k.namn, m.status
FROM kompis k
INNER JOIN members m
ON m.namn = k.namn
WHERE k.namn2 = '[i]username[/i]'
AND k.godkand = 'Ja'
AND m.status = 'online'
ORDER BY 1
Jo, men jag förstår inte vad du vill göra? Den koden jag skrev fungerar(vad jag vet) bra för att ta ut någons kompisar som är online. Och den fungerar mot mySQL.
får det här fel messet:
[TCX][MyODBC]You have an error in your SQL syntax near 'UNION SELECT k.namn, m.status FROM kompis k INNER JOIN members m ON m.namn = k.n' at line 1