Je garde un enregistrement des connexions dans une table. J'ai des colonnes pour id, ip, date et heure. À partir de cet enregistrement des connexions, je veux récupérer les connexions effectuées uniquement au cours de la dernière heure.
Je passe en revue les documents MySQL sur les fonctions d'heure et de date, mais je n'arrive pas à les combiner correctement.
Quelqu'un peut-il m'aider?
Utilisez les fonctions DATE_SUB () et Now ():
select count(*) as cnt
from log
where date >= DATE_SUB(NOW(),INTERVAL 1 HOUR);
J'espère que cela vous aide:)
Si vous souhaitez implémenter cela dans un cronjob, vous devez spécifier le début et la fin.
Par exemple, à 14 h, si vous souhaitez obtenir les données de la dernière heure de 13h00 à 13 h 59 min 59 s, voici comment procéder:
dateField BETWEEN
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 HOUR), '%Y-%m-%d %H:00:00')
AND
DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 HOUR), '%Y-%m-%d %H:59:59')
Je recommande d'avoir une colonne datetime au lieu de colonnes de date et d'heure.
Supposons que vous ayez une colonne datetime appelée last_login:
SELECT id, ip_address, last_login
FROM mytable
WHERE last_login >= DATE_SUB(NOW(), interval 1 hour);
cela peut être fait facilement en utilisant
select count(*) from logins where datetime>= NOW()- INTERVAL 1 HOUR
Vous pouvez également utiliser la fonction CURDATE ()
SELECT
count(*) AS TotalCount
FROM
tblName
WHERE
datetime >= DATE_SUB(CURDATE(), INTERVAL 1 HOUR)
sans les détails, je pense que Date_Add () fonctionnerait .. en ajoutant à votre clause where un ajout de NOW heures négatives
(ou Date_Sub ())