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
%>
hvordan bruger man Order By og Group By i samme sql sætning og kan man overhovedet det?
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.
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?
> 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
det må være noget med at tjekke om LastID har været brugt før eller huh, jeg kan ik helt gennemskue det..
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"
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
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"
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
20. juli 2003 - 15:44
#10
Ok ;) lidt sent svar håber det går.
Kurser inden for grundlæggende programmering