Maxy.fr

Sélection en fonction d’une plage horaire avec des timestamp en Mysql

Si comme beaucoup vous utilisez Mysql pour enregistrer vos données ainsi que les timestamp pour enregistrer vos données temporelles, il vous est peut-être arrivé de vouloir sélectionner des données en fonction d’une plage horaire précise. Ce qui est simple en soit mais deviens plus compliqué lorsque les données sont enregistrées sur plusieurs jours.

Prenons un exemple concret : Vous avez dans votre base de données enregistré le passage de chacun de vos visiteurs avec le timestamp correspondant à leurs visites. Vous souhaitez maintenant savoir combien de personnes se sont connecté entre 18 et 20h. Vous ne pouvez basiquement pas utiliser les comparateurs simple comme « where timestamp >= x » étant donnés que les enregistrements sont effectués sur plusieurs jours (à moins de vouloir connaître le nombre de connecté sur une journée seulement).

Bon tout ça pour en finir à un sélecteur assez simple non plus du timestamp complet mais de l’heure précise de celui-ci (ou de la minute, seconde, jour… suivant l’application).

Pour ne compter que les visiteurs s’étant connecté entre 18 et 20h on utilisera donc ceci :

SELECT * FROM nomDeLaTable WHERE FROM_UNIXTIME(timestamp,'%H') >= '18' AND FROM_UNIXTIME(timestamp, '%H') < '20'

Voilà, aussi simple que ça, mais encore fallait-il connaître cette possibilité.

Catégories : MySql

Par Guillaume le 28/11/2013 à 23:03

Partager l'article :

Articles similaires

Lire plusieurs fois toutes les données récupérées avec fetch en PDO

Vous connaissez tous la méthode suivante pour lire une série de données enregistrées via MySQL : $listeRep = $bdd->query("SELECT * FROM registre ORDER BY id DESC"); while($listeData = $listeRep->fetch()) { echo $listeData['nom']; }   Vous...

Utiliser GROUP BY day, month, year sous doctrine2

En temps normal il est simple de grouper des données séléctionnées via une requête MySQL par jour, mois, année ou par heure par exemple (du moins lorsque vous enregistrez bien vos date en "datetime"). Il suffit en effet d'utiliser "GROUP BY day(date)" et...