17. juli 2003 - 15:39Der 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 %>
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
> 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
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
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"
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.