dedlfix: Fehler bei Datenbankabfrage (Date Problem?)

Beitrag lesen

Tach!

SELECT user_id,f_name,l_name,email,date,MAX(date) as datemax,MIN(date) as datemin

> FROM wp_fsq_data WHERE datemax BETWEEN '2015-02-23 15:02:15' AND '2015-02-21 15:02:15'
> GROUP BY user_id ORDER BY datemax

bekomme ich den Fehler: #1054 - Unknown column 'datemax' in 'where clause'

Die Abarbeitungsreihenfolge der Klauseln ist: FROM (mit Joins), WHERE, GROUP BY, jetzt erst kommt das SELECT, ORDER BY, LIMIT. Das WHERE hat keine Ahnung von den Aliasnamen im SELECT. Sie können dort nicht verwendet werden. Du kannst dich da nur auf den Feldnamen beziehen. (Aliasnamen von Tabellen können angegeben werden, weil FROM ja schon behandelt wurde.)

Ich denke, eine Subquery, die zuerst gruppiert und die Max-/Min-Werte ermittelt, und das WHERE in der äußeren Query ist zielführend.

Das date-Feld in der DB ist vom Typ datetime und wird so gespeichert: 0000-00-00 00:00:00

Wohl eher nicht. Wie es gespeichert wird, ist nicht relevant. Das was du da zeigst ist das Aus- und Eingabeformat. Für den Programmierer ist nur wichtig, ob das Feld ein Datums- (und Zeit-)Typ ist oder ein String-Typ. Auf erstere kann man eine Vielzahl Datums- und Zeit-Funktionen anwenden, auf Strings nicht.

Was mache ich denn falsch?

Außer dem genannten Punkten verwendest du noch jede Menge Felder im Select, die nicht im Group-By aufgeführt sind. MySQL lässt zwar sowas zu, nimmt aber dann irgendwelche Feldinhalte aus der Gruppe der Datensätze. Das kann zu unerwünschten Ergebnissen führen. Lediglich Aggregatfunktionen (MIN, MAX, SUM, ...) können gefahrlos andere Felder verwenden.

dedlfix.