MySQL Datumssortierung Problem

TTlong

Angesehenes Mitglied
Hallo,

in einer Tabelle habe ich mehrere Einträge,welche mit einem MySQL-Timestamp versehen sind. Es gibt so zum Beispiel für den heutigen Tag 2 Einträge. Mit folgender Query sollten eben diese beiden Einträge angezeigt werden, das Ergebnis ist aber '0':

CODE
$SQL = "SELECT COUNT(id) AS count FROM ".DB_PREFIX."archive WHERE DATE_FORMAT(senddate, '%Y'-'%m'-'%d') = CURRENT_DATE() AND loginname = '".$this->DB->escapeString($_SESSION['username'])."'";



senddate = die Spalte mit dem MySQL-Timestamp



Was mache ich hier falsch?


MySQL-Verson: 5.0.51a-24+lenny5


Gruß TTlong
 
date_format nimmt als Parameter MySQL Date und nicht timestamp- Versuch es mal mit DATE_FORMAT( FROM_UNIXTIME (senddate), '%Y'-'%m'-'%d') = CURRENT_DATE()
 
QUOTE (wrahim @ Mi 30.03.2011, 09:43) date_format nimmt als Parameter MySQL Date und nicht timestamp

Es handelt sich um einem MySQL-Timestamp im Format: YYYY-MM-DD HH:MM:SS nicht um einen UNIX-Timestamp als Integer-Wert.
 
deine abfrage vergleicht YYYY-MM-DD mit YYYY-MM-DD HH:II:SS ... kein wunder, dass das nicht klappt ;-)

warum nicht
CODE ... WHERE senddate LIKE "'.date('Y-m-d').'%" ...

?
 
QUOTE (wurzel @ Mi 30.03.2011, 10:54) deine abfrage vergleicht YYYY-MM-DD mit YYYY-MM-DD HH:II:SS ... kein wunder, dass das nicht klappt ;-)

warum nicht

CODE ... WHERE senddate LIKE "'.date('Y-m-d').'%" ...

?

Eigentlich nicht, weil DATE_FORMAT(senddate, '%Y'-'%m'-'%d') den in der DB vorhanden MySQL-Timestamp in YYYY-MM-DD umwandelt, insofern sollte es korrekt sein.

Und CURRENT_DATE() liefert ebenfalls das Format YYYY-MM-DD
 
sorry, hab ich übersehen. du hast recht, der vergleich funktioniert (habs grad mal getestet). hast du die query mal im PMA abgesetzt? eigentlich müsste noch ein gemecker kommen, weil du "count" als alias nicht in backticks einsetzt.
 
QUOTE (wurzel @ Mi 30.03.2011, 11:21) ...der vergleich funktioniert (habs grad mal getestet)...

Was heisst 'funktioniert' bei dir?

Getestet iss des auch in PHPmyAdmin..ABER..ebenfalls mit dem Ergebnis '0' ... ohne Gemecker ;-)
 
QUOTE (TTlong @ Mi 30.03.2011, 09:23)[...]

CODE
$SQL = "SELECT COUNT(id) AS count FROM ".DB_PREFIX."archive WHERE DATE_FORMAT(senddate, '%Y'-'%m'-'%d') = CURRENT_DATE() AND loginname = '".$this->DB->escapeString($_SESSION['username'])."'";


[...]



Der Fehler ist im DATE_FORMAT von Dir. Bei Dir steht folgendes:

CODE DATE_FORMAT(senddate, '%Y'-'%m'-'%d')


Richtig wäre aber dies:

CODE DATE_FORMAT(senddate, '%Y-%m-%d')




Fehlerursache ist hier also der falsche Umgang mit der Funktion, der String muss für das Format durchgehen sein. Somit muss es wie folgt lauten:

CODE
$SQL = "SELECT COUNT(id) AS count FROM ".DB_PREFIX."archive WHERE DATE_FORMAT(senddate, '%Y-%m-%d') = CURRENT_DATE() AND loginname = '".$this->DB->escapeString($_SESSION['username'])."'";




http://dev.mysql.com/doc/refman/5.5/en/dat...ion_date-format
 
QUOTE (Sascha Ahlers @ Mi 30.03.2011, 11:32) Richtig wäre aber dies:

CODE DATE_FORMAT(senddate, '%Y-%m-%d')


Jap, so geht es, danke!

Ich hab die Doku gestern und heute zwar mehrfach gelesen, aber irgendwie genau das wohl übersehen und/oder gedacht, ich mach es richtig so wie ich es mache ;-)
 
Zurück
Oben