Avatar billede stauer Nybegynder
17. juli 2003 - 15:39 Der er 9 kommentarer og
1 løsning

Sortere udtræk fra DB

Hejsa

Jeg har nogle spørgsmål til hvordan man sortere recordsets. Hvis jeg gør som jeg har illustreret i min sql sætning så sortere den data rigtig nok når den udskriver resultaterne bortset fra den ikke sortere nogle lande i den rigtige rækkefølge. Men hvis jeg ændrer Order By til at sortere via lande så looper den forkert igennem min asp kode og kommer med flere af samme resultater.. Nogen der har nogen forslag?

strSQL = "SELECT * FROM customer, customercat WHERE customer.id=customercat.cust_id And ("&SQL&") And Activated='yes' Order By customer.id ASC"
Set rs = Conn.Execute(strSQL)

lastID = ""
lastCountry = ""
do while not rs.EOF
if lastCountry <> rs("s1_5") then
strCountry = "Select * From country Where id="& rs("s1_5")
Set rsCountry = Conn.Execute(strCountry)
Response.Write("<tr height=""20""> <td bgcolor=""#708090"" height=""20""><font color=""white""><b>")
Response.Write("Country : " & rsCountry("country") &"<br>")
lastCountry = rs("s1_5")
end if
Response.Write("</b></font></td></tr>")
'Response.Write("<tr><td height=""20""></td></tr>")
%>

<%
if lastID <> rs("customer.id") then
Response.write "<tr><td>"
Response.Write ("<br><strong>No. "& rs("customer.id") &" - ")
Response.write rs("s1_1") & "</strong><br>"
Response.Write Mid(rs("s2_7"), 1, 100)
Response.Write("<br><br>")
lastID = rs("customer.id")
Response.write ("<strong>The Company's sectors:</strong><br>")         
sqlCategory = "SELECT * FROM customercat, subcategory WHERE customercat.sectors=subcategory.id And customercat.cust_id=" & rs("customer.id")
Set rsCategory = Conn.Execute(sqlCategory)
'Response.Write(sqlCategory)
Do While Not rsCategory.EOF
Response.Write rsCategory("subcatname")
Response.Write("<br>")
rsCategory.Movenext
Loop
Response.Write("<br><hr>")
end if                 
rs.Movenext
%>
Avatar billede stauer Nybegynder
17. juli 2003 - 15:42 #1
hvordan bruger man Order By og Group By i samme sql sætning og kan man overhovedet det?
Avatar billede eagleeye Praktikant
17. juli 2003 - 16:00 #2
Det kan man også godt, alle de kolonne man bruger skal skrives i GROUP BY rækken.

GROUP BY xx, ID ORDER BY ID

men så forvinder ens gruppe når man laver GROUP BY på autonummer kolonnen.

GROUP BY gruppere recordsne og dermed vil ID kolonnen være hulter til bulter, laver man så en ORDER BY på den vil GROUP BY ikke længere virker. Så at havde ORDER BY autonummer kolonne sammen med GROUP BY er ikke så smart.

Ëks.:
id navn
1  A
2  B
3  A

GROUP BY navn, ID ORDER BY ID giver
id navn
1  A
2  B
3  A
men GROUP BY navn giver
id navn
1  A
3  A
2  B

så du må finde en anden form for ORDER BY end ID.
Avatar billede hossein Nybegynder
17. juli 2003 - 16:01 #3
hvis det ver msAccess, sådan f ex:
SELECT kolonne,SUM(kolonne) FROM table GROUP BY kolonne Order by kolonne

Id nummerne er de i rækkefølge, har du slettet noget? er datatypen tal? hvad er database sproget under indstillinger?
Avatar billede stauer Nybegynder
17. juli 2003 - 16:06 #4
> eagleeye.. du har jo hjulpet mig en del med det her, men kan du se hvad man skulle lave om i loopet så jeg kan sortere via lande men ikke får dubletter af id'er
Avatar billede stauer Nybegynder
17. juli 2003 - 16:09 #5
det må være noget med at tjekke om LastID har været brugt før eller huh, jeg kan ik helt gennemskue det..
Avatar billede eagleeye Praktikant
17. juli 2003 - 16:31 #6
Umiddelbart sådan her, men det giver jo så et andet output som du skriver, da ID'ne så bliver blandet:
strSQL = "SELECT * FROM customer, customercat WHERE customer.id=customercat.cust_id And ("&SQL&") And Activated='yes' Order By customer.s1_5 ASC"

Jeg kan ikke lige gennemskue hvordan der skal ændre,hvad hvis du har to ORDER BY kolonne sådan her, så sortere den først på ID og så på lande id:

strSQL = "SELECT * FROM customer, customercat WHERE customer.id=customercat.cust_id And ("&SQL&") And Activated='yes' Order By customer.id ASC, customer.s1_5 ASC"
Avatar billede stauer Nybegynder
17. juli 2003 - 17:45 #7
det virker hvis jeg gør sådan her:
Order By customer.s1_5 ASC, customer.id ASC

mit sidste spørgsmål er det her.. Hvis man har søgt på flere sectors dukker et firma op det samme antal gange som de er med i de søgninger man har lavet på sectors.. Hvad er der galt i dette loop?

Do While Not rsSe.EOF
lastID = ""
If lastID <> rsSe("customer.id") Then
Response.write "<tr><td>"
Response.Write ("<br><strong>No. "& rsSe("customer.id") &" - ")
Response.write rsSe("s1_1") & "</strong><br>"
Response.Write Mid(rsSe("s2_7"), 1, 100)
Response.Write("<br><br>")
lastID = rsSe("customer.id")
Response.write ("<strong>The Company's sectors:</strong><br>")         
sqlCategory = "SELECT * FROM customercat, subcategory WHERE customercat.sectors=subcategory.id And customercat.cust_id=" & rsSe("customer.id")
Set rsCategory = Conn.Execute(sqlCategory)
'Response.Write(sqlCategory)
Do While Not rsCategory.EOF
Response.Write rsCategory("subcatname")
Response.Write("<br>")
rsCategory.Movenext
Loop
Response.Write("<br><hr>")
End If                 
rsSe.Movenext
Loop
Avatar billede stauer Nybegynder
17. juli 2003 - 17:45 #8
min sql streng ser sådan her ud

newSQL = "SELECT * FROM customer, customercat WHERE customer.id=customercat.cust_id And ("&SQL1&") And Activated='yes' And s1_5='"&Countries&"' Order By customer.id ASC"
Avatar billede stauer Nybegynder
17. juli 2003 - 18:09 #9
løste selv det sidste spørgsmål, men kan du ik lige svare eagleeye så ruller der nogen point i din retning

Tak for hjælpen
Avatar billede eagleeye Praktikant
20. juli 2003 - 15:44 #10
Ok ;)  lidt sent svar håber det går.
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