Avatar billede bjoern_bertelsen Nybegynder
10. november 2005 - 14:00 Der er 2 kommentarer og
1 løsning

sortering af 2 parametre i sql forespørgsel

Hejsa, jeg har en tabel som har følgende kolonnenavne:

ID, traadnr, tekst, traadoprettetaf, traadoverskrift, beskedoprettetaf og dato.

Det er meningen, det skal være til et forum. ID er primærnøgle, og er autonummering. traadnr angiver hvilken tråd man skriver i. der vil altså være mange rækker i databasen med fx. traadnr 1, hvor det eneste der faktisk er forskelligt i dem er ID, dato og selve teksten.

Jeg skal lave en hovedside til forummet, hvor den sorterer og viser hvor mange tråde der er. pt. ser kode sådan ud:

Set rs = Conn.Execute(strSQL)

If Not (rs.BOF Or rs.EOF) Then
        Response.Write "<table width=450 border=1 bordercolor=#000000 cellpadding=0 cellspacing=0 style=""border-collapse: collapse"">"
        response.write "<tr><td width=250><font face=verdana size=2><b>Overskrift</b></td><td><font face=verdana size=2><b>Oprettet af</b></td></tr>"
        Do While Not rs.EOF
        response.write "<tr><td width=250><font face=verdana size=2><font face=verdana size=2><a href=forumtraad.asp?traadnr="&rs("traadnr")&">" & rs("traadoverskrift") & "</a></td>"
        response.write "<td><font face=verdana size=2>Af " & rs("traadoprettetaf") & " d. " & rs("dato") & "</tr>"
        rs.MoveNext
        Loop
        Response.Write "</table></center>"
    Else
        Response.Write "<p><font face=verdana size=2>Der er endnu ikke nogle der har skrevet i gæstebogen</font></p>"
    End If

og jeg ved godt den ikke skal se sådan ud, da ovenstående viser hver eneste række i databasen, og derfor har alle såkaldte "underkommentarer" i et forumindlæg med.

Hvordan laver jeg min forespørgsel så den kun medtager den række for hver tråd, hvor ID'et er lavest? Her må jo forstås, at den første række hvor et nyt traadnr findes, må have det laveste ID, og dermed så må være "hovedindlægget" på en ny tråd.

hvordan får jeg det sorteret på den måde?
Avatar billede bjoern_bertelsen Nybegynder
10. november 2005 - 14:01 #1
hovsa, glemte første linje af koden som var selve SQL forespørgslen:

strSQL = "SELECT traadoverskrift, traadnr, traadoprettetaf, beskedoprettetaf, dato FROM forum ORDER BY ID DESC;"
Avatar billede bjoern_bertelsen Nybegynder
10. november 2005 - 16:57 #2
Ingen bud? Burde det ikke være simpel SQL-formulering?

Noget med at vælge MIN(forum.ID) for hver traadnr, og så give mig hele baduljen der?
Avatar billede bjoern_bertelsen Nybegynder
14. november 2005 - 21:31 #3
ja nu har jeg fundet ud af det. Jeg omgås den mærkelige SQL-kodning ved at lave en løkke, hvor jeg kontrollerer om traadnr er det samme som før. Hvis det er, fortsætter jeg med næste linje, men hvis det ikke er, så fylder jeg ind i tabellen, med det info der står på den række, og så fremdeles. Så får jeg kun én række pr. traadnr, og da jeg sorterer med ID lavest og opad, så får jeg altid den første i rækken, dvs. hovedoplægget.

Koden:

strSQL = "SELECT * FROM forum ORDER BY ID ASC;"
Set rs = Conn.Execute(strSQL)

If Not (rs.BOF Or rs.EOF) Then

Response.Write "<table width=450 border=1 bordercolor=#000000 cellpadding=0 cellspacing=0 style=""border-collapse: collapse"">"
response.write "<tr><td width=450><font face=verdana size=2><b>Forum indlæg</b><br></td></tr><tr><td width=450>"

Do While Not rs.EOF

If not rs("traadnr") = traadnr THEN
   
traadnr = rs("traadnr")
response.write "<font face=verdana size=2><font face=verdana size=2><a href=forumtraad.asp?traadnr="&rs("traadnr")&">" & rs("traadoverskrift") & "</a>"
response.write "<font face=verdana size=2> - Af " & rs("traadoprettetaf") & " d. " & rs("dato") & "<br><br>"

End if
           
rs.MoveNext
Loop
Response.Write "</td></tr></table></center>"
       
Else
Response.Write "<p><font face=verdana size=2>Der er endnu ikke nogle der har skrevet i forummet</font></p>"
End if

jeg hapser selv pointene
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester