Ik heb even moeite met een SQL query die ik wil draaien. In dit voorbeeld ga ik uit van een bedrijf, wat graag bij wil houden wie van elke functies de beste posts (meeste 'likes') heeft geplaatst. En bij een gelijk aantal likes, telt degene die hem als eerste heeft toegevoegd
In eerste instantie was de oplossing om dmv PHP te loopen over alle functies, daarop een ORDER BY toepassen, en het eerste resultaat gebruiken. Dat komt neer op het uitvoeren van de volgende query voor elke functie afzonderlijk:
Dat moet vast beter en met SQL kunnen dacht ik, dus ik ben begonnen met het maken van een samengestelde query. Het probleem is dat het me tot nu toe alleen maar gelukt is om op één kolom te rangschikken. Onderstaand voorbeeld geeft mijn huidige probeersel weer:
Dit geeft wel de info weer, maar sorteert nog niet op datum. Dus als er twee personen zijn met dezelfde functei die hetzelfde aantal likes hebben gekregen, dan wil ik dat degene die als eerste gepost heeft weergegeven wordt. Simpelweg MAX(datum) 'maxdatum' aan de tweede select toevoegen en opnemen in de WHERE clausule werkt in ieder geval niet.
Heeft iemand een idee hoe ik dit het beste kan aanpakken? Of zijn de afzonderlijke queries hier toch the way to go?
In eerste instantie was de oplossing om dmv PHP te loopen over alle functies, daarop een ORDER BY toepassen, en het eerste resultaat gebruiken. Dat komt neer op het uitvoeren van de volgende query voor elke functie afzonderlijk:
SQL:
1
2
3
4
5
6
7
| SELECT `id`, `functie`, `likes`, `posts`, `datum` FROM `bedrijf` WHERE `functie` = 'Marketing' ORDER BY `posts` DESC, `datum` DESC LIMIT 1 |
Dat moet vast beter en met SQL kunnen dacht ik, dus ik ben begonnen met het maken van een samengestelde query. Het probleem is dat het me tot nu toe alleen maar gelukt is om op één kolom te rangschikken. Onderstaand voorbeeld geeft mijn huidige probeersel weer:
SQL:
1
2
3
4
5
6
7
| SELECT a.`id`, a.`functie`, a.`likes`, a.`posts`, a.`datum` FROM `bedrijf` AS a, ( SELECT `functie`, MAX(`likes`) `likes` FROM `bedrijf` GROUP BY `functie` ) m WHERE a.`likes` = m.`likes` AND a.`functie` = m.`functie`; |
Dit geeft wel de info weer, maar sorteert nog niet op datum. Dus als er twee personen zijn met dezelfde functei die hetzelfde aantal likes hebben gekregen, dan wil ik dat degene die als eerste gepost heeft weergegeven wordt. Simpelweg MAX(datum) 'maxdatum' aan de tweede select toevoegen en opnemen in de WHERE clausule werkt in ieder geval niet.
Heeft iemand een idee hoe ik dit het beste kan aanpakken? Of zijn de afzonderlijke queries hier toch the way to go?