2010-07-14 15 views
9

Sagen wir, ich möchte zehn Datensätze mit den meisten Likes in den letzten 24 Stunden zu bekommen. Hier ist, was ich bisher:PHP MySQL Query beliebtesten in den letzten 24 Stunden

$date = date("o-m-d"); 
$query = "SELECT date_created,COUNT(to),from,to FROM likes WHERE date_created LIKE '$date%' GROUP BY to ORDER BY COUNT(to) DESC LIMIT 10"; 

Das Problem mit diesen ist, dass es nur von diesem Tag am besten gefallen wird, egal, wie weit in diesen Tag es ist. In den letzten 24 Stunden wird es nicht besonders beliebt.

Struktur für Likes: von | zu | date_created | ID

Daten sind in ISO-Standardzeit - Beispiel 2010-07-14T00: 35: 31-04: 00. Komm direkt von der PHP-Referenz: date ("c");

+0

mein Datentyp varchar, was ich jetzt tun ... – Bharanikumar

Antwort

21
WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR) 
+1

+1 - Verdammt, können Sie schneller geben als ich :( –

+0

Danke für das Kompliment –

+0

@ Dave Rix zu Stackoverflow Willkommen :) –

1

Sie sollten Datum/Uhrzeitfunktionen anstelle von LIKE verwenden.

WHERE date_created >= (NOW() - INTERVAL 24 HOUR) 
+0

MUSS> NICHT < –

+0

@haim evgi sein Ja, ich habe diesen Fehler bemerkt, nachdem ich die Antwort eingereicht habe. :) –

+0

gute Antwort, aber es gibt ein Problem: wir sollten die Zeit in PHP verarbeiten nicht mysql –

1

Also zunächst einmal DATE_CREATED sollte auf default current timestamp als Zeitpunkt definiert werden. Wenn Sie auch in der Tabelle ein DATE_MODIFIED dann würde on update current timestamp haben DATE_MODIFIED und Sie können mit Datum als Zeitpunkt erstellt definiert und dieser Trigger aktualisieren

CREATE TRIGGER likes_date_entered 
BEFORE INSERT ON likes 
FOR EACH ROW SET NEW.date_created = NOW() 

Nachdem wir nun einen Zeitstempel haben, können Sie leicht einige anwenden Das mysql-Datum funktioniert in der Spalte.

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

Ich werde verlassen, was für den Leser als eine Übung zu tun, es sei denn, Sie sagen, bitte schön und wollen, dass ich die genaue Syntax geben.

+0

George oder Hami Bedingungen funktionieren, sobald Sie den Datentyp ändern. – umassthrower

+0

Sie wissen, meine Antwort ist besser :-P Die Berechnung des Zeitstempels in PHP ist eine schlechte Idee: "Daten sind in ISO-Standardzeit - Beispiel 2010-07-14T00: 35: 31-04: 00. Kommen Sie direkt aus der PHP-Referenz: Datum ("c"); " – umassthrower

2

Wenn das Feld date_created ein datetime- oder timestamp-Feldtyp ist, können Sie DATE_SUB wie folgt in Ihrer where-Klausel verwenden:

 

WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR) 
 
Verwandte Themen