ORDER BY case region.id when 0 then 0 else 1 end
region.namn, idrotter.namn
Red:
Varför har du group by då?
16 svar · 296 visningar · startad av G8
Jag använder mig av följande kodsnutt, och den verkar skriva ut rätt, men jag skulle vilja ha idrotter.region = 0 överst oavsett vad som finns mer i databasen, och därefter ska resten komma...
GROUP BY idrotter.region, idrotter.namn ORDER BY regioner.namn, idrotter.namn asc"
Editering: Hur skall man skriva för att skriva ut en GROUP i taget sen? Jag menar, vill ju skriva ut alla dör idrotter.region=0, sedan en radbrytning och därefter regioner.namn i stigande ordning...
Jag får inte till själva utskriften riktigt heller, skriver ut allt i en klump eller en radbrytning efter varje region...
Mvh
//G8
ORDER BY case region.id when 0 then 0 else 1 end
region.namn, idrotter.namn
Red:
Varför har du group by då?
för att jag vill att den ska skriva ut i grupper om grupp, där region=0 överst och sedan fallande...
alltså så att det blir nått i stil med..
FOR EACH GROUP
response.write(<%="rs.region"%>"<p/>)
GROUP.MOVENEXT
LOOP
Jo, jag vet att den koden inte finns, men det kanske förklarar lite bättre hur jag vill att det ska fungera.. ;)
Mvh
//G8
Jo, men så blir det inte om du har med group by. Ta bort det.
Det viktiga är order by
set rs = connect.execute(sql)
region = ""
while not rs.eof
if rs("region") <> region then
'
'skriv ut region
'
region = rs("region")
end if
'
'skriv ut idrotter
'
rs.movenext
wend
Men eftersom det kan finnas flera idrotter inom en och samma GROUP, så måste bli nått i stil med:
stm = "hämta data om regioner och idrotter GROUP BY idrotter.region, idrotter.namn ORDER BY regioner.namn, idrotter.namn asc"
rs1 = connection.execute("stm")
FOR EACH GROUP
stm2 = "hämtar information ang. de klubbar som finns registerade i aktuell idrott"
rs2 = connection.execute("stm2")
do until rs2.eof
response.write(<%=rs("region")%>, <%=rs2("klubbnamn")%>"<p/>)
rs2.movenext
loop
GROUP.MOVENEXT
LOOP
Ja, nått sånt där måste det väl bli antar jag...
Om group by är relevant eller inte beror på vad du hämtar, dvs hur select-listan ser ut. Vad vill du göra?
:)
Min nuvarande kod:
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#3D4B5B">
<table width="504" border="0" cellpadding="0" cellspacing="1">
<%
Sportid = request.querystring("LID")
set connection = Server.CreateObject("ADODB.Connection")
Connection.Open "databasen"
count = 1
stm = "SELECT idrotter.id AS idrottsid, idrotter.namn AS idrottsnamn, idrotter.antal_klubbar, idrotter.aktiv, idrotter.Senaste_matchen, idrotter.region, regioner.namn AS idrottsregion FROM idrotter INNER JOIN regioner ON regioner.id = idrotter.region WHERE idrotter.idrottsid="& Sportid &" AND aktiv=-1 GROUP BY idrotter.region, idrotter.namn ORDER BY regioner.namn, idrotter.namn asc"
%>
<tr>
<td width="150" height="20"> Idrott</td>
<td width="194" align="center">Ledare</td>
<td width="53" align="center">Region</td>
<td width="42" align="center">Klubbar</td>
<td width="59" align="center">Aktiv</td>
</tr>
<%
Do until rs1.eof
stm2 = "SELECT klubbar.id AS klubbid, klubbar.namn AS klubbnamn, klubbar.poang, klubbar.deleted, klubbar.hibernate, regioner.namn FROM klubbar INNER JOIN regioner ON klubbar.region = regioner.id WHERE klubbar.idrott="& rs1("idrottsid") &" AND klubbar.deleted=0 AND klubbar.hibernate=0 ORDER BY klubbar.poang desc"
set rs2 = Connection.Execute(stm2)
'lite kod för att växelvis ändra färg på cellerna i tabellen
if count mod 2 = 0 then
bgcolor = "#9AACBE"
else
bgcolor = "#BDC9D5"
end if
%>
<tr>
<%if rs2.eof then%>
<td bgcolor="<%=bgcolor%>"><img src="images/<%=rs1("idrottsnamn")%>.gif" alt=" <%=rs1("idrottsnamn")%> " width="150" height="13" border="0"></td>
<td align="center" bgcolor="<%=bgcolor%>">Inga registrerade klubbar</td>
<td align="center" bgcolor="<%=bgcolor%>"><img src="images/flags/na.gif" alt=" N/A " width="14" height="12"></td>
<td align="center" bgcolor="<%=bgcolor%>">0</td>
<td align="center" bgcolor="<%=bgcolor%>"><img src="images/no.gif" alt=" NO " width="23" height="13" border="0"></td>
<%else%>
<td bgcolor="<%=bgcolor%>"><a href="lista.asp?LID=<%=rs1("idrottsid")%>&SPORT=<%=SERVER.URLEncode(namn)%>&Idrott=<%=SERVER.URLEncode(rs1("idrottsnamn"))%>"><img src="images/<%=rs1("idrottsnamn")%>.gif" alt=" <%=rs1("idrottsnamn")%> " width="150" height="13" border="0"></a></td>
<td align="center" bgcolor="<%=bgcolor%>"><a href="klubbinfo.asp?klubbid=<%=rs2("klubbid")%>"><%=rs2("klubbnamn")%></a></td>
<td align="center" bgcolor="<%=bgcolor%>"><img src="images/flags/<%=rs2("namn")%>.gif" alt=" <%=rs2("namn")%> " width="14" height="12"></td>
<td align="center" bgcolor="<%=bgcolor%>"><%=rs1("antal_klubbar")%></td>
<td align="center" bgcolor="<%=bgcolor%>">
<%
Datum = DateDiff("d", Date, rs1("senaste_matchen"))
if CINT(datum) >= -21 then
response.write("<img src=" & "images/yes.gif" & " " & "alt=" & " YES " & " " & "width=" & "23" & " " & "height=" & "13" & " " & "border=" & "0" & ">")
else
response.write("<img src=" & "images/no.gif" & " " & "alt=" & " NO " & " " & "width=" & "23" & " " & "height=" & "13" & " " & "border=" & "0" & ">")
end if
%>
</td>
<%end if%>
</tr>
<%
count = count + 1
rs1.MoveNext
Loop
Rs1.Close
set rs1 = Nothing
Connection.close
Set connection = Nothing
%>
</table>
</td>
</tr>
</table>
Jag vill alltså att den skall lista så här:
Region: Internationellt
Fotboll -> Klubben FF -> flagga
Basket -> Klubben BC -> flagga
region: Blekinge
Hockey -> Klubben HC -> flagga
Bandy -> Klubben BK -> flagga
Pingis -> Klubben BTK -> flagga
Region: Halland
Fotboll -> IFK Klubben -> flagga
Pingis -> BTK Klubben -> flagga
Alltså, börja med region inernationellt (region=0) och sedan lista resterande regioner efter namn, i fallande ordning...
Blev det klarare nu?
Mvh
//G8
Det skall inte vara någon group by i detta läge. Group är till för att ta bort duplikat.
ahh, ok...
hur 17 ska jag då få till en gruppering?
Min kunskap sträcker sig inte mkt längre än så här... :r
Mvh
//G8
Det blir med order by och att du sköter om det i ASP så som jag beskrev.
Hmm, har äntligen fått ordning på grupperingen, samt att avsluta tabbeler/tabellraderna rätt...
Var tvungen att gå ut en sväng och rensa skallen... ;)
Nu är det bara att få sorteringen i rätt ordning...
använder jag:
ORDER BY case region.id when 0 then 0 else 1 end, region.namn, idrotter.namn
så sorterar den fortfarande i bokstavsordning, gör alltså inget undantag för region.id=0 som jag vill ha överst. Jag la till ett kommatecken efter end, får felmeddelande annars... påverkar det nått?
Kan jag lägga till flera kriterier i "ORDER BY Case", så att man t.ex. placerar region.id=0 först, sedan vill man ha region.id=24, sedan region.id=21 för att därefter sortera resten i fallande bokstavsordning?
Mvh
//G8
btw: går det att bygga visare på order by case för att inkludera fler reservationer i sorteringen, typ:
ORDER BY case when region.id = 0 then region.id=14 then region.id=17 else 1 end, region.namn, idrotter.namn
Har testat att göra så som övan men det verkar ju inte fungera...
nån?
Mvh
//G8
Busenkelt ju... :)
ORDER BY case when region.id = 0 then 0 else 1 end, case when region.id = 27 then 0 else 1 end, region.namn, idrotter.namn
Bara att lägga till en "case" sats ktill så löser det sig :)
//G8
Du kan ha flera when i en case
ORDER BY case when region.id = 0 then 0
when region.id = 27 then 1 else 2 end,
region.namn, idrotter.namn
eller så kan du skriva
ORDER BY case region.id
when 0 then 0
when 27 then 1 else 2 end,
region.namn, idrotter.namn