2010-07-14 5 views
9

Dites que je veux obtenir dix enregistrements avec les mentions «J'aime» dans les dernières 24 heures. Voici ce que j'ai jusqu'à présent:PHP MySQL Query plus populaire dans les dernières 24 heures

$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"; 

Le problème avec cette est qu'il obtient seulement le plus aimé compter de ce jour, peu importe la distance en ce jour-là, il est. Il ne reçoit pas le plus aimé des dernières 24 heures.

structure pour les goûts: à partir de | à | date_created | id

les dates sont dans l'heure ISO standard - exemple 2010-07-14T00: 35: 31-04: 00. Venez directement de la référence PHP: date ("c");

+0

mon type de données est varchar, ce que je fais maintenant ... – Bharanikumar

Répondre

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

1 - Merde, vous pouvez taper plus vite que moi :( –

+0

Merci pour le compliment –

+0

Bienvenue sur Rix @ Dave stackoverflow :) Vous –

1

Vous devez utiliser les fonctions date/heure au lieu de LIKE.

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

DOIT ÊTRE> PAS < –

+0

@haim evgi Oui, j'ai remarqué cette erreur après avoir soumis la réponse. :) –

+0

bonne réponse, mais il y a un problème: nous devrions traiter l'heure en PHP pas mysql –

1

Alors d'abord date_created devrait être défini comme un horodatage avec le default current timestamp. Si vous avez un DATE_MODIFIED dans la table et ensuite DATE_MODIFIED aurait on update current timestamp et vous pouvez définir avec la date de création comme un horodatage et ce déclencheur pour mettre à jour

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

Maintenant que nous avons un horodatage, vous pouvez facilement appliquer certaines la date mysql fonctionne dans la colonne.

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

Je vais laisser quoi faire comme exercice pour le lecteur, à moins que vous dites à peu et me s'il vous plaît voulez donner la syntaxe exacte.

+0

Les conditions de George ou Hami fonctionnera une fois que vous modifiez le type de données. – umassthrower

+0

vous savez, ma réponse est meilleure :-P Le calcul de l'horodatage en PHP est une mauvaise idée: "les dates sont en heure ISO standard - exemple 2010-07-14T00: 35: 31-04: 00. Venez directement de la référence PHP: date ("c"); " – umassthrower

2

Si votre champ date_created est un type de champ datetime ou timestamp, vous pouvez utiliser DATE_SUB dans votre clause where comme suit;

 

WHERE date_created > DATE_SUB(NOW(), INTERVAL 24 HOUR) 
 
Questions connexes