webForumDet fria alternativet

Gruppera poster från DB?

ASP

8 svar · 280 visningar · startad av bigsky

Medlem sedan maj 2002821 inlägg
Frågan#1

Jag har en resedatabas som jag vill skriva ut poster ifrån. Först vill jag skriva ut alla resor från punkt A med dess destinationer. Först när villkoret gått i genom hela databasen och inte hittar fler poster med resor från punkt A, ska den börja skriva ut alla resor från punkt B med dess destinationer, osv. Det vill säga att jag vill skapa någon sorts gruppering. Det funkar dock inte att bara skriva ut hela databasen och sortera i bokstavsordning. För då blir det ingen gruppering. Hur ska villkoret se ut?

Ungefär såhär skulle jag vilja att det skrevs ut:

Resor från punkt A:
> Resa 1
> Resa 2
> Resa 3

Resor från punkt B:
> Resa 1
> Resa 2 osv.

Medlem sedan dec. 200012 464 inlägg
#2

Sköt grupperingen i ASP

set rs = connect.execute("select * from travel order by departure asc")
dep = ""
while not rs.eof
if  dep <> rs("departure") then
    dep = rs("departure")
    response.write "Resor från " & dep & "<br>" 
end if
'visa övrigt data
rs.movenext
wend
Medlem sedan maj 2002821 inlägg
#3

Jag får det inte att funka :(

Medlem sedan maj 2002821 inlägg
#4

Loopen ska ju skriva ut alla resor från punkt A tills den inte hittar fler poster, och då fortsätta med alla resor från punkt B. Egentligen är det väl två loopar. En som skriver ut resor från alla punkter och en som kollar om det finns fler resor från en punkt, fast vid olika tillfällen. I så fall, ska ju dessa skrivas ut innan loop ett går vidare med att skriva ut resorna från tex. punkt B.

Medlem sedan juli 2002145 inlägg
#5

Den exempelkod LarsG skrivit ser alldeles utmärkt ut i mina ögon...

Du läser upp datat från databasen och sorterar på det fält som motsvarar "Punkt A", "Punkt B" i ditt exempel - det som LarsG kallar "departure". Så loopar du igenom resultatsetet.

För varje gång du får ett nytt värde i "departure" skriver du gruppens rubrik, "Resor från punkt A:", "Resor från punkt B:", etc, dvs

response.write "Resor från " & dep & "<br>"

i LarsGs exempel.

För varje post i setet skriver du sedan det/de fält som motsvarar informationen "Resa 1", "Resa 2" , etc, i ditt exempel. Det ska du göra där LarsG skrivit "visa övrigt data". Där borde det alltså stå nå't i stil med

response.write "Resa till " & rs("destination") & "<br>"

Är inte detta lösningen på ditt problem får du nog beskriva problemet lite mer ingående... ;)

Medlem sedan apr. 2001126 inlägg
#6

Har du testat:

strSQL = "SELECT * FROM minaResor GROUP BY startPunkt ORDER BY startPunkt ASC"

Denna sqlsträng kommer att grupera databasen efter startPunkten och sortera den i alfabetisk ordning. ;-)

Medlem sedan maj 2002821 inlägg
#7

Jaha, nu funkar det. Då kommer nästa fråga. Om jag har två resor från punkt A, fast vid olika tider. Hur ska jag då skriva för att skriva ut dem enligt följande:

Resor från punkt A:
> Resa 1 = 10.15
= 12.30

Och inte så här:

Resor från punkt A:
> Resa 1 = 10.15
> Resa 1 = 12.30

Medlem sedan juli 2002145 inlägg
#8

Då får du bygga på LarsGs kod med ytterligare en variabel där du håller "destination" så att den bara skrivs ut när det blir en förändring. Så här nånting:

set rs = connect.execute("select * from travel order by departure, [red]destination[/red]")
dep = ""
while not rs.eof
if  dep <> rs("departure") then
    dep = rs("departure")
    [red]dest = ""[/red]
    response.write "Resor från " & dep & "<br>" 
end if
[red]if  dest <> rs("destination") then
    dest = rs("destination")
    response.write dest & " "
end if[/red]
'visa övrigt data
[red]response.write "= " & rs("dep_time") & "<br>"[/red]
rs.movenext
wend
Medlem sedan maj 2002821 inlägg
#9

Tänk vad mycket hjälp man kan få på så kort tid... Det här är en riktigt bra sida. Fantastiskt! Tack alla riktiga programmerare. Själv leker man ju bara lite framför tangenterna.

255 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)