webForumDet fria alternativet

Förbättra kompis listan.

ASP

39 svar · 740 visningar · startad av Bosse168

Medlem sedan nov. 20031 018 inlägg
Frågan#1

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%">&nbsp;<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>&nbsp;

    </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%">&nbsp;<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>&nbsp;
    </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
%>
Medlem sedan juli 20011 084 inlägg
#2

kompislista

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.

Medlem sedan nov. 20031 018 inlägg
#3

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).

Medlem sedan juli 20011 084 inlägg
#4

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.

Medlem sedan nov. 20031 018 inlägg
#5

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å.

Medlem sedan dec. 20003 887 inlägg
#6

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?

Medlem sedan nov. 20031 018 inlägg
#7

man måste först godkänna dom (kompis.godkand= 'Ja').

Medlem sedan dec. 20003 887 inlägg
#8

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
Medlem sedan nov. 20031 018 inlägg
#9

Funkar ju inte alls.
Funkar den koden till en MySQL databas?

Medlem sedan dec. 20003 887 inlägg
#10

Ingen aning, tyvärr... jag testade mot Access. :l Jag vet inte om MySQL hanterar UNION.

Medlem sedan sep. 2000667 inlägg
#11

Blev fel...

Medlem sedan nov. 20031 018 inlägg
#12

Ingen som vet hur man gör detta mot en MySQL databas?

Medlem sedan juli 20011 084 inlägg
#13

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.

Målar du inte in dig i ett hörn nu?

Kanske bättre att tänka om i så fall?

Medlem sedan nov. 20031 018 inlägg
#14

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

Medlem sedan dec. 20003 887 inlägg
#15

Ah, men det är min lilla SQL-sats, mozillas såg ut såhär

strSQL = "SELECT kompis.namn2,members.namn,members.status " & _
  "FROM kompis " & _
  "INNER JOIN members " & _
  "  ON members.namn = kompis.namn2 " & _
  "WHERE (kompis.namn='" & username & "' " & _
  "  OR namn2='" & username & "') " & _
  "  AND godkand='Ja' " & _
  "ORDER BY members.status"

Set RecSet= Connect.Execute(strSQL)
Medlem sedan nov. 20031 018 inlägg
#16

Den funkade men den loopar ändå ut alla fast dom inte är online.

Medlem sedan dec. 20003 887 inlägg
#17

Jag klippte och klistrade lite klantigt...

strSQL = "SELECT kompis.namn2,members.namn,members.status " & _
  "FROM kompis " & _
  "INNER JOIN members " & _
  "  ON members.namn = kompis.namn2 " & _
  "WHERE (kompis.namn='" & username & "' " & _
  "  OR namn2='" & username & "') " & _
  "  AND godkand='Ja' " & _
  "  AND members.status = 'online'" & _
  "ORDER BY members.namn"

[blue]  ' "ORDER BY member.status" är meningslös, eftersom alla är online...[/blue]
Set RecSet= Connect.Execute(strSQL)
Medlem sedan nov. 20031 018 inlägg
#18

loppar fortfarande ut alla.

Medlem sedan dec. 20003 887 inlägg
#19

Då är det du som har ett bekymmer med det sätt du sparar medlemmens status.

AND members.status = 'online'

Säger tydligt att frågan väljer ut alla ur databasen som har status online.

Medlem sedan juni 200032 967 inlägg
#20

Man kan ju alltid roa sig med att försöka flytta status-villkoret från WHERE-delen till JOIN-instruktionen:

strSQL = "SELECT kompis.namn2,members.namn,members.status " & _
  "FROM kompis " & _
  "INNER JOIN members " & _
  "  ON members.namn = kompis.namn2 " & _
  "  AND members.status = 'online' " & _
  "WHERE (kompis.namn='" & username & "' " & _
  "  OR namn2='" & username & "') " & _
  "  AND godkand='Ja' " & _
  "ORDER BY members.namn"

Inte för att jag vet om det hjälper, men roa sig kan man alltid. ;)

Mvh

279 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
143 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
143 ms — ändringar (db)