webForumDet fria alternativet

Problem med sortering

4 svar · 314 visningar · startad av Sebbe

SebbeMedlem sedan jan. 20032 285 inlägg
#1

Jag håller på med ett system för att skapa en serietabell från ett matchschema i fotboll. Den nuvarande SQL-satsen för att ta ut lagens statistik ser ut såhär:

SELECT id, lagNamn,
((SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id AND hemmaMal > bortaMal) OR (bortaLag = lag.id AND bortaMal > hemmaMal)) * 3 + (SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id OR bortaLag = lag.id) AND hemmaMal = bortaMal)),
(SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id AND hemmaMal > bortaMal) OR (bortaLag = lag.id AND bortaMal > hemmaMal)),
(SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id OR bortaLag = lag.id) AND hemmaMal = bortaMal),
(SELECT COUNT(*) FROM matcher WHERE hemmaLag = lag.id OR bortaLag = lag.id)
FROM lag
ORDER BY 3 DESC

Mitt problem är att lagen inte sorteras efter deras poäng (vilket 'ORDER BY 3 DESC' borde göra), utan de visas i den ordningen som de lades in i databasen. Någon som har en aning om hur jag kan lösa problemet?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#2

Varför inte göra alias med AS så kan du sortera efter namnet istället?

SebbeMedlem sedan jan. 20032 285 inlägg
#3

Ingen aning varför, men då får jag felmeddelandet
'Microsoft JET Database Engine error '80040e10'
No value given for one or more required parameters.' :o

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Vissa exempel som jag har sett tyder på Access har problem med att sortera med avseende på komplexa uttryck

select * from (
SELECT id, lagNamn,
((SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id AND hemmaMal > bortaMal) OR (bortaLag = lag.id AND bortaMal > hemmaMal)) * 3 + (SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id OR bortaLag = lag.id) AND hemmaMal = bortaMal)) points,
(SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id AND hemmaMal > bortaMal) OR (bortaLag = lag.id AND bortaMal > hemmaMal)) as won,
(SELECT COUNT(*) FROM matcher WHERE (hemmaLag = lag.id OR bortaLag = lag.id) AND hemmaMal = bortaMal) as draw,
(SELECT COUNT(*) FROM matcher WHERE hemmaLag = lag.id OR bortaLag = lag.id) as played
FROM lag ) dt
ORDER BY points DESC
SebbeMedlem sedan jan. 20032 285 inlägg
#5

Tack, Gud! ;) :D

127 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)