Benutzt du '*' in deinen Abfragen?
Nein! :)
Benutzt du Limit um einzelne Reihen abzufragen?
Will alles! :)
Benutzt du joins um Ergebnisse zu verknüpfen?
Ja!
Hast du die richtigen Indizies gesetzt? (ist zwar nicht für die Menge, aber für die Geschwindigkeit relevant)
Denk doch mal.
Das ist immer noch nicht aussagekräftig.
Reicht das? :)
SELECT DISTINCT YEAR(date) AS year, MONTH(date) AS month , COUNT(DISTINCT pics_categories.id) AS num, (MAX(pics_entries.filename)>$newerAs) AS new FROM pics_categories LEFT JOIN pics_entries ON pics_entries.catid = pics_categories.id WHERE pics_categories.status & 0x01=0 GROUP BY year, month ORDER BY year DESC, month DESC, filename
Grob zusammen gefasst funktioniert es so:
1. Tabelle pics_categories enthält Angaben über ein Event, das in Bildern festgehaltet wurde! Wann es war und wie es heißt.
2. Tabelle pics_entries enthält immer einen Eintrag pro Bild, mit Verweis auf die Kategorie, einen Hitcount und dem Dateinamen.
3. Die Dateinamen setzen sich immer so zusammen YYYY-MM-DD-HH... usw., das bedeuted immer wenn ein Bild auf den Server kommt, bekommt es das aktuelle Datum u. die aktuelle Zeit vorne an gestellt.
4. Erreichen wollte ich folgendes und hab ich ja auch! :)
Alle Kategorien zusammengefaßt nach Jahr und Monat und wieviel Kategorien in einem bestimmten Monat sind. Das ganze nach Jahr u. Monat absteigend sortiert.
5. Zusätzlich ein Flag, welches mir anzeigt, ob eine Kategorie(ngruppe) neue Bilder (Bilder neuer als $newerAs) enthalten, damit ich in der Ausgabe das Ganze kenntlich machen kann.
Funktioniert.
Ach ja pics_categories.status dient zum Ausblenden von Kategorien, deshalb ist das in der WHERE-Klausel.
Fragen? :)
Gruß,
Andy