Hallo,
ich bastle nun schon länger an einer MySQL-Abfrage mit einem GROUP BY Befehl rum, komme aber auf keine Lösung. Vereinfacht habe ich folgende Tabellen:
band:
- id
- name
album:
- id
- band_id
- name
- production_date
song:
- id
- band_id
- album_id
- name
- charts (Wert für Charts)
album_has_song:
- song_id
- album_id
- order (für Sortierung der Songs)
Um die Songs auszulesen, verwenden ich den folgenden Query:
SELECT
*
FROM
band as b LEFT JOIN album as a ON b.`id` = a.`band_id` LEFT JOIN
album_has_song as ahs ON ahs.`album_id` = a.`id` LEFT JOIN
song as s ON ahs.`song_id` = s.`id`
WHERE
-- weitere Bedingungen
ORDER BY
b.`name` ASC,
a.`production_date` DESC,
ahs.`order` ASC
LIMIT
25
Die Abfrage soll nun aber nur die Top 25 der «Charts» selektieren (je höher der s.charts Wert ist, umso besser das Ranking), wobei pro Album aber immer nur ein Song in den Charts sein darf. Ich habe es schon mit «GROUP BY a.id» versucht, aber ich komme dann nicht weiter, weil ich es dann nicht schaffe, vom gruppierten Album den Song mit dem höchsten s.charts-Wert zu bekommen, anstatt den Ersten der gefunden wird. «MAX(s.charts)» hilft mir insofern nicht weiter, weil ich dann ja nur den höchsten Charts-Wert bekomme, aber nicht die dazu passenden Spalten wie z.B. Song-Name.
Weiss jemand, wie ich das realisieren kann? Benötige ich evt. einen Subquery?
Vielen Dank für Hilfe,
Lupus