2017-01-06 4 views
-4

Meine Tabelle MYSQL-Datenbank-Tabelle filtern:Wie durch aktuelles Datum

id message  sent_user_id sent_user_name received_user_id received_user_name table_no message_time  status 
1 Need a help   6 Saman kumara     11 Kamal Perera    0 2016-12-07 17:28:41  0 
2 Need a help   6 Saman kumara     10 Nimal Rajapaksha   0 2017-01-05 18:17:35  0 
3 Need a help   6 Saman kumara     10 Nimal Rajapaksha   0 2017-01-05 18:21:20  0 
4 Need a help   6 Saman kumara     10 Nimal Rajapaksha   0 2017-01-05 18:22:15  1 

Ich brauche alle Zeilen auszuwählen, in den message_time zu aktuellem Datum entspricht.

SELECT * FROM message_info WHERE message_time = CURDATE(); 

Dies ist eine Abfrage, die ich versuchte. Aber es funktioniert nicht.

+2

[so] ist * nicht * ein kostenloser Code-Schreibdienst. Von Ihnen wird erwartet, dass Sie ** den Code selbst schreiben **. Nach [mehr Forschung] (http://meta.stackoverflow.com/questions/261592), wenn Sie ein Problem haben, können Sie ** posten, was Sie versucht haben ** mit einer ** klaren Erklärung, was nicht funktioniert ** und Bereitstellung eines [** minimalen, vollständigen und überprüfbaren Beispiels **] (http://stackoverflow.com/help/mcve). Ich schlage vor, eine gute Frage und die perfekte Frage zu lesen (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/). Nimm auch die [Tour]. –

+0

Normalerweise würden Sie sent_user_name und received_user_name in einer solchen Tabelle nicht speichern. – Strawberry

+0

Ich habe es versucht. Das ist eine Abfrage, die ich ausprobiert habe. "SELECT * FROM message_info WHERE message_time = CURDATE();" aber es funktioniert nicht. –

Antwort

2
SELECT * FROM message_info WHERE DATE_FORMAT(message_time, "%y-%m-%d") = CURDATE(); 

Sie wollen die dates vergleichen, so müssen Sie die Zeitdaten von der datetime in der Tabelle entfernen. Sie können dies tun, indem Sie DATE_FORMAT() verwenden.

Wenn es eine index auf der Säule ist message_time Sie sollten diese Abfrage verwenden:

SELECT * 
FROM message_info 
WHERE message_time 
    BETWEEN DATE_FORMAT(CURDATE(), "%y-%m-%d 00:00:00") AND DATE_FORMAT(CURDATE(), "23-59-59") 

Wenn Sie den Wert Ihrer Spalte verwenden, seine Funktion zu verändern index nicht verwendet werden kann. Indem Sie den Suchalgorithmus ändern, um nach Daten zwischen beginning of day x und end of day x zu suchen, erhalten Sie das gleiche Ergebnis, ohne den Wert für die Suche ändern zu müssen.