19. juli 2007 - 15:25Der er
8 kommentarer og 1 løsning
Problemmer med en order by left join query
Hej sidder og koger lidt over hvorfor dette ikke fungere som jeg gerne vil
har db1: id / brugernavn / password har db2: id / brugerId / rating
nu vil jeg gerne have en liste ud med mine brugere sorteret efter deres AVG(db2.rating).
har prøvet med dette men ser ikke ud til den sortere overhovedet.
"select db1.*,AVG( db2.rating ) as AVGRating from db1 LEFT JOIN db2 ON db1.id = db2.brugerId where '1' = '1' GROUP BY db1.id ORDER BY AVGRating DESC limit 0,10"
min where 1 = 1 er bare for at illustere hvor jeg insætter min where's, jeg får en liste på 10 men de er ikke sorteret efter AVG rating i db2.
Alt hvad du har på din select liste som ikke er en aggerat funktion (avg, sum, max...) skal med på din group by. Hvorfor man aldrig bruger * sammen med aggerat funktioner:
"select db1.id, db1.navn ,AVG( db2.rating ) as AVGRating from db1 LEFT JOIN db2 ON db1.id = db2.brugerId where '1' = '1' GROUP BY db1.id, db1.navn ORDER BY AVGRating DESC limit 0,10"
MySQL har en grim lille feature hvor den faktisk tillader felter i SELECT som hverken er aggregerede eller er i GROUP BY - MySQL tager bare værdien fra en tilfældig række.
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.