Ich bin mit diesem:
SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year FROM table_name WHERE year = 2009;
aber es gibt mir eine Fehlermeldung:
Unknown column 'year' in 'where clause'SELECT FROM_UNIXTIME(my_unix_timestamp_column, '%Y') AS year FROM table_name WHERE year = 2009
Beide "my_unix_timestamp_column" und "table_name" richtig sind, weiß ich nicht, warum es gibt mir diese!!!
Ich bin mit PHP 5.3.0
InformationsquelleAutor Sam | 2009-11-10
Ich bin mir nicht ganz sicher, ob dies aufgrund der
YEAR
wird ein reserviertes Wort in MySQL ist, oder weil er Sie tun will, etwas entlang der Linien von:Kann mich nicht erinnern, ob der Letzte Punkt ist nur relevant für
GROUP
ings :SInformationsquelleAutor jensgram
Im Gegensatz zu
WHERE
KlauselHAVING
Klausel verweisen können, dieSELECT
- Klausel Aliasnamen.Mehr index effizienter Weg wäre:
year
in der where-Klausel. (auch beide sind so strukturiert, dass eine etwas weniger normalen Weg, als ein Abgleich mit der Jahres in der where-Klausel)InformationsquelleAutor Quassnoi
Andere alternative, Vermeidung von Wiederholungen von einer ziemlich groß Funktionsaufruf:
Könnten Sie noch brauchen, um zu verwenden, um zurück Anführungszeichen um das Wort 'Jahr', um Konflikte mit JAHR als Stichwort. Der Optimierer sollte nicht müssen, erstellen Sie eine temporäre Tabelle, die Antwort auf diese Abfrage.
InformationsquelleAutor Jonathan Leffler
Können Sie nicht verwenden, eine Spalte erstellt, die
SELECT
Abschnitt in IhremWHERE
Klauselersetzen Sie die
year
variable in Ihrer where-Klausel mit der eigentlichen Funktion zu erstellen, die Spalte (akaFROM_UNIXTIME(my_unix_timestamp_column, '%Y')
), und Sie sollten in Ordnung sein.Dies ist, weil die
SELECT
Abschnitt Ihrer Abfrage nicht ausgeführt, bis dieWHERE
Abschnitt abgeschlossen hat, die passenden Zeilen zurück.SELECT
Abschnitt ist einfach falsch. Ich werde nicht downvote Sie, aber versuchen Sie die folgende Abfrage ausführen:SET @r := 1; SELECT @r := id + 1 FROM mytable WHERE @r = id
auf einer Tabelle mit aufeinander folgenden ids ab1
.InformationsquelleAutor Jehiah
Der WHERE-Teil wird ausgeführt, bevor das aliasing in der Feldliste. Beste Sache ist, zu verwenden ZWISCHEN in der WHERE-Klausel, so dass ein index verwendet werden kann.
InformationsquelleAutor johannes