Immer das neueste Bild pro Kategorie

ncpschmidt

Benutzer
Beiträge
12
Hallo Community,

das ist mein erster Post und zugleich meine erste Frage. Vorweg erkläre ich kurz die Ausgangssituation:

Tabellen inkl. wichtiger Spalten:
Name: categories
Spalten: id, name

Name: photos
Spalten: id, thumb, category

Aktuelle Abfrage
SELECT categories.id, categories.name, photos.category, photos.thumb
FROM categories
INNER JOIN photos ON photos.category = categories.id
GROUP BY photos.category

Dadurch frage ich alle Kategorien ab und erhalte jeweils ein zugehöriges Bild.
Die gewünschte Abfrage soll bezwecken, dass immer das neuste Bild der jeweiligen Kategorie gezogen wird.

Reicht hier ein einfacher Einschub von ORDER BY an der korrekten Stelle? Ich hoffe auf eine erfolgreiche Hilfestellung :).

Beste Grüße
Niels
 
Werbung:
Aktuelle Abfrage
SELECT categories.id, categories.name, photos.category, photos.thumb
FROM categories
INNER JOIN photos ON photos.category = categories.id
GROUP BY photos.category

Dadurch frage ich alle Kategorien ab und erhalte jeweils ein zugehöriges Bild.
Die gewünschte Abfrage soll bezwecken, dass immer das neuste Bild der jeweiligen Kategorie gezogen wird.

Reicht hier ein einfacher Einschub von ORDER BY an der korrekten Stelle? Ich hoffe auf eine erfolgreiche Hilfestellung


Nein. Sonst würdest Du auch nicht fragen. In allen anderen DB-Systemen dieser Welt würdest Du einen Syntaxfehler bekommen, in MySQL 'nur' ein falsches Resultat. Was gefällt Dir besser: Syntaxfehler oder falsches Ergebnis?
 
Weder noch. Hast du denn eine Idee, wie ich diese Abfrage in MySQL korrekt umsetze?

Die SQL-Norm sagt sinngemäß: alle Spalten des Resultates müssen entweder aggregiert oder gruppiert sein. Alle 'richtigen' DB-Systeme prüfen das auch, und werfen einen Syntaxfehler, wenn man dagegen verstößt. MySQL ist halt zu behindertet, das zu erkennen. Haltedich einfach an diese Regel. Nutze besser gleich eine DB, die solche Fehler erkennt.
 
Also ist es nicht möglich, mit MySQL so eine Abfrage zu generieren? Ich bin recht neu in dem Themenbereich und arbeite mit MAMP auf dem Mac.
 
Also ist es nicht möglich, mit MySQL so eine Abfrage zu generieren?

Möglich ist das schon, nur solltest Du Dich an die genannten Regeln halten. Wenn z.B. die ID strikt hochzählend ist, dann fragst Du erst einmal je Kategorie die höchste ID ab. Das Resultat dieser Anfrage kannst Du dann zum Joinen nehem, um 'den Rest' abzufragen.
 
Das ist ein logischer Ansatz, da hast du Recht. Magst du mir evtl. eine Abfrage zusammenstellen? Ich bin etwas überfordert bzgl. der Inner-, Left- & Rightjoinings.
Das wäre totally awesome!

Gruß
 
Du sucht in etwa sowas:
Code:
SELECT    categories.id,
        categories.name,
        p2.thumb
FROM    categories
LEFT JOIN (    SELECT    photos.category,
                    max(photos.id) AS id
            FROM    photos
            GROUP BY photos.category ) p1
ON        categories.id = p1.category
LEFT JOIN photos p2
ON        categories.id = p2.category
AND        p1.id = p2.id
Das macht allerdings wirklich nur Sinn, wenn deine IDs aufsteigend vergeben werden. Wenn dem nicht so ist, fehlt deiner photos Tabelle die Information welches Foto das aktuellste ist.
 
Super! Die Abfrage funktioniert ohne Abänderungen super!
Ich verstehe zwar noch nicht ganz, was es mit p1 und p2 auf sich hat, aber dafür ist mein Datenbankverständnis noch nicht ausgereift genug. Vielen Dank für die Hilfe!
 
Werbung:
In der Klammer wird zu jeder category die höchste photos.id per GROUP BY ermittelt. Das wiederum ist eine Tabelle die du per LEFT JOIN auf deine Haupttabelle joinst mit Alias p1. Den Wert aus thumb kannst du aber nicht sinnvoll aggregieren daher muss der nochmal separt gejoint werden, also als p2.
 
Zurück
Oben