Calcul sur heure

Eléphanteau du PHP | 15 Messages

05 avr. 2007, 22:56

Bonjour,

J'aimerais obtenir la liste de tous les enregistrements effectués durant les 30 dernières minutes dans une table

Je n'arrive pas à indiquer cela dans ma requête

Code : Tout sélectionner

query = "SELECT NomEleve, id_Renv, NomMaitre, Discipline, CONCAT( DATE_FORMAT(DateRenv, '%e'), ' ', CASE DATE_FORMAT(DateRenv, '%m') WHEN 1 THEN 'jan.' WHEN 2 THEN 'f&eacute;v.' WHEN 3 THEN 'mars' WHEN 4 THEN 'avr.' WHEN 5 THEN 'mai' WHEN 6 THEN 'juin' WHEN 7 THEN 'jui.' WHEN 8 THEN 'ao&ucirc;t' WHEN 9 THEN 'sep.' WHEN 10 THEN 'oct.' WHEN 11 THEN 'nov.' WHEN 12 THEN 'd&eacute;c.' ELSE 'Inconnu' END) AS DateR FROM SR.renvoisTEST WHERE Motif='' and Annule=0 and HeureRenv<='$HeureR' and HeureRenv>'$HeureR'-30 minutes and id_an='".$_SESSION['id_an']."' ORDER BY id_Renv ASC";
Merci d'avance de votre aide

Bien cordialement
Gecko

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 avr. 2007, 00:05

Ta requête est compliquée et ne nous aide pas vraiment, tout ce qu'il faut savoir c'est : est-ce que tu as une colonne qui stocke la date de l'enregistrement, et en quel format ?

Si oui, et si c'est une colonne de type DATE, tu trouveras dans la FAQ comment calculer un intervalle avec MySQL.

Eléphanteau du PHP | 15 Messages

06 avr. 2007, 21:49

Bonjour,
Dans ma base de données j'ai :
  • une colonne qui contient la date de l'enregistrement au format date 0000-00-00 (DateRenv)
    et une colonne qui contient l'heure de l'enregistrement au format time 00:00 (HeureRenv).
Ce que je désire est de pouvoir afficher tous les enregistrements dont le champ HeureRenv <= heure actuelle et > heure actuelle - 30'. Mon problème se situe au niveau du calcul de ces trentes minutes surtout lorsque l'heure doit être modifiée !!

Je n'ai pas trouvé le renseignement dans la FAQ d'où mon message !

Bien cordialement et merci pour votre aide
Gecko

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

07 avr. 2007, 00:10

Déjà si j'étais à ta place, je fusionnerais ces deux colonnes, en une seule au format datetime.

Tu as dans la FAQ ce sujet : http://www.phpfrance.com/forums/voir_sujet-8323.php, dans lequel on trouve "4 - Obtenir une date dans le futur/le passé ". Bon c'est pour une date, mais c'est presque la même chose pour les temps. Donc dans ton cas, ça pourrait être un truc dans le genre :

Code : Tout sélectionner

SELECT col1, col2 FROM table WHERE DateRenv = NOW() AND HeureRenv >= SUBTIME(CURTIME(), '00:30:00.000000');
Bon là ce qui est embêtant c'est si tu fais ta recherche entre 00:00 et 00:30... d'où l'intérêt de fusionner les deux colonnes, SUBTIME se chargera de tout ;)

À tester, notamment en vérifiant si les fonctions sont dispos dans ta versions de MySQL (si tu utilises MySQL, tu n'as pas précisé...)

=> http://dev.mysql.com/doc/refman/5.0/en/ ... tions.html

Eléphanteau du PHP | 15 Messages

08 avr. 2007, 21:20

Un grand merci pour votre réponse,
mais le serveur que j'utilise a encore la version 3.23 de MySQL et je ne sais pas comment faire pour modifier juste la version de MySQL sans toucher à PHP (version 4.2.0) puisqu'une grosse application tourne sous PHP et qu'elle ne tourne pas sur une version supérieure sans retoucher beaucoup le code (variables).
Alors je suis preneur pour une autre solution que subtime() ou sur le moyen de modifier la version de MySQL.
Bien cordialement
Geckco
Gecko