14. juli 2003 - 10:22Der er
17 kommentarer og 1 løsning
Sortere udtræk fra DB
Hejsa
Jeg skal lave en søgning i min database. Man har mulighed for at søge på land og sector. Mit første problem er at samme virksomhed kan deltage i flere sectors, men jeg vil gerne kun have listet hvert firma engang (så selvom man søger på flere sectors og et firma deltager i flere kategorier skal det kun komme frem en gang)
Mit andet problem er at sortere mit udtræk efter lande (Countries) således at den lister i lande rækkefølge.
Countries = Request.Form("country") ComSectors = Request.Form("sectors")
Dim i
' opbyg sql så den søger på de rigtige sectors i = 1 For Each value in Request.Form("sectors") If i = 1 Then SQL = SQL + "sectors="&Value&" " Else SQL = SQL + "or sectors="&Value&" " End If i = i + 1 Next
' træk fra customer db og customercat (sector) db strSQL = "SELECT * FROM customer, customercat WHERE customer.id=cust_id And ("&SQL&") And Activated='yes' Order By customer.id ASC"
Prøv at sætte DISTINCT og så kun skrive den kolonnenavn som du vil havde ud:
strSQL = "SELECT DISTINCT customer.name, customer.sectors FROM customer, customercat WHERE customer.id=cust_id And ("&SQL&") And Activated='yes' Order By customer.id ASC"
Den vil stadig skrive den samme virksomhed flere gange ikke? Lad os sige man søger på sectors 1, 2 og 3 og virksomheden har tilmeldt sig alle 3, så vil søgningen (også selvom man bruger DISTINCT) medtage den samme virksomhed 3 gange siden den er med i alle 3 sectors.. eller huh :)
Ja hvis du vil havde sectoren med ud så vil den blive gentaget men hvis du kan udvære sectors informationen kan du ude lade den fra selecten:
strSQL = "SELECT DISTINCT customer.name FROM customer, customercat WHERE customer.id=cust_id And ("&SQL&") And Activated='yes' Order By customer.id ASC"
Du vil jo have den til at finde alle rækker, men fjerne nogen...
Du bliver nødt til at kode dig ud af det. Hvis dine output er sorteret efter firma, så må du i løkken der gennemløber alle posterne i resultsættet fjerne dem, der er gengangere.
strSQL = "SELECT * FROM customer, customercat WHERE customer.id=cust_id And ("&SQL&") And Activated='yes' Order By customer.id ASC"
Set rs = Conn.Exeute(strSQL) lastFirma = "" do while not rs.EOF if lastFirma <> rs("firmaNavn") then response.write "<br>" response.write rs("firmaNavn") & "<br>" lastFirma = rs("firmaNavn") response.write "Fundet i sektor: else response.write "," end if response.write rs("sectors") rs.Movenext loop
jeg bruger ikke den sql streng til at vise hvilke sectors virksomheden er tilmeldt.. Den skal bare medtage virksomheden i søgningen hvis den er tilmeldt enten 1,2 og/eller 3..
Men hvordan kunne man bygge sådan en løkke op, det er mere det jeg fisker efter :)
Som vist 14/07-2003 11:08:36 princippet er at tjekke på om det er samme firmanavn som lige er blevet udskrivet if lastFirma <> rs("firmaNavn") then
og alt efter om det er føste gang det skal udskrives eller nanvet lige er udskriver så gør noget forskelligt. Hvis navnet på firmaet lige er vist udskrives et ","
Jeg har ændret det så den tjekker på customer.id istedet og det virker fint.. nu er det sådan at hver virksomhed kommer fra bestemte lande som i db er defineret med tal fra 1-19, så loopet skal samtidig tjekke på hvad rs("country"), og dele resultat op per land.. any suggestions :)
lastID = "" do while not rs.EOF if lastID <> rs("customer.id") then response.write "<br>" response.write rs("s1_1") & "<br>" lastID = rs("customer.id") response.write "Fundet i sektor:" else response.write "," end if response.write rs("sectors") rs.Movenext loop
På samme måde med hensyn til land. Du skal bare lave din ORDER BY så den sortere på land.
lastID = "" lastCountry = "" do while not rs.EOF if lastCountry <> rs("country") then response.write "<br>" Response.Write "Country : " & rs("country") & "<br>" lastCountry = rs("country") end if
if lastID <> rs("customer.id") then response.write "<br>" response.write rs("s1_1") & "<br>" lastID = rs("customer.id") response.write "Fundet i sektor:" else response.write "," end if response.write rs("sectors") rs.Movenext loop
jeg vil gerne have defineret et landenavn istedet for det tal som jeg bruger i min customer tabel. Jeg har en anden tabel der hedder country hvor jeg har country.id og country.country (for navnet på landet)
Men hvordan sammenligner jeg resultatet, jeg har prøvet med det her, men kan godt se at min asp evner ikke er helt i top :)
if lastCountry <> rs("s1_5") then response.write "<br>" Country = rs("s1_5") Response.Write("Country : " & Country(rsCountry("id")=rsCountry("country")) &"<br>") lastCountry = rs("s1_5") end if
Synes godt om
Ny brugerNybegynder
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.