SQL-Abfrage - kein Order By max() AS ??
Chriz
- datenbank
0 Flo T.0 Vinzenz Mai0 Ilja
Moin...
Mal eine kurze Frage:
Mein SQL-Query weigert sich im WHERE-Zweig, nach einem neu erstellten Feld auszuwählen. Kann mir jemand mit dem richtigen Syntax auf die Sprünge helfen??
SELECT
*,
max(date + time) AS datum
FROM events
datum < '1161424143'
GROUP BY id_concert
ORDER BY datum DESC
Er sagt mir
Unknown column 'datum' in 'where clause
aber warum kann ich dann nach datum sortieren??
Ich raff es nicht :(
Gruß,
Chriz
Hallo Chriz!
SELECT
*,
max(date + time) AS datum
FROM events
datum < '1161424143'
GROUP BY id_concert
ORDER BY datum DESC
Where is your where? ;)
Unknown column 'datum' in 'where clause
Zuerst wird das where ausgewertet und dann erst 'datum'. Deswegen geht's nicht!
Probier mal:
SELECT
*,
max(date + time) AS datum
FROM events
HAVING datum < '1161424143'
GROUP BY id_concert
ORDER BY datum DESC
lg Flo
Hallo
Zuerst wird das where ausgewertet und dann erst 'datum'. Deswegen geht's nicht!
Richtig. Deswegen gibt es, wie z.B. auch in Datensätze gruppieren mit SQL nachzulesen ist, HAVING. Allerdings ist die Reihenfolge der Klauseln festgelegt - und HAVING kommt folgerichtig _nach_ GROUP BY, Daher
SELECT
id_concert,
max(date + time) AS datum
FROM events
GROUP BY id_concert
HAVING datum < '1161424143' -- Warum ein Zeichenkettenvergleich?
ORDER BY datum DESC
Da nach keiner anderen Spalte als id_concert gruppiert wurde, habe ich alle anderen Spalten rausgeworfen. Nur MySQL läßt solche Schlampigkeit zu - und das Ergebnis ist laut Handbuch unvorhersagbar. Unvorhersagbare Ergebnisse sind unbrauchbar.
Möchte der OP weitere Detailinformationen, so bekommt er diese typischerweise über eine korrelierte Unterabfrage, was MySQL 4.1 und neuer voraussetzt.
Der Datentyp der Spalten "date" und "time" scheint ebenfalls ungünstig gewählt zu sein. Es gibt den Datentyp DATETIME :-) Es gibt Datums- und Zeitfunktionen.
Freundliche Grüße
Vinzenz
yo,
Nur MySQL läßt solche Schlampigkeit zu - und das Ergebnis ist laut Handbuch unvorhersagbar. Unvorhersagbare Ergebnisse sind unbrauchbar.
nicht ganz, das handbuch sagt nur, wenn der rest der spalten, über die nicht gruppiert wurde unterschiedliche werte aufweisen, nur dann sind die ergebnisse unvorhersehbar. aber da eine id benutzt wurde, ist es sehr wahrscheinlich, dass die benutzung laut mysql korrekt ist. ich stimmte dir aber zu, das ist grausam.
noch eine ergänzung, HAVING hat hier nichts zu suchen, auch nicht, weil man damit den alias namen benutzen kann. alles was man in der WHERE klausel ausschließen kann, sollte auch da rein geschreiben werden. HAVING macht nru sinn, in benutzung mit aggregat-funktion.
Ilja