IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Trouver un enregistrement selon la date SAUF l'heure [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 94
    Points
    94
    Par défaut Trouver un enregistrement selon la date SAUF l'heure
    Bonjour,

    Ca fait un moment que je tourne en rond. J'ai besoin d'extraire un enregistrement de ma base de données selon un champs datetime. Jusque la c'est assez simple.

    Ca se complique, car je ne peux pas savoir exactement l'heure (décalage horaire). L'enregistrement peut être stocké selon:
    - 2014-03-16 16:59:29
    - 2014-03-16 17:59:29
    - 2014-03-16 18:59:29
    - .... ou pire :
    - 2014-03-17 00:59:29

    MAIS il me faut connaitre exactement les minutes et secondes.

    Actuellement je fait un truc comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	$expire1 	= $expire[2].'-'.$expire[1].'-'.$expire[0].' '.$expire[3].':'.$expire[4].':'.$expire[5]  ; // 2014-03-16 16:59:29
    	$expire2 	= $expire[2].'-'.$expire[1].'-'.$expire[0].' '.($expire[3]+1).':'.$expire[4].':'.$expire[5]  ; // 2014-03-16 17:59:29
    	$query 	= 'SELECT id FROM table WHERE (date_end='.$db->quote($expire1). ' OR date_end='.$db->quote($expire2) .')' ;
    Evidement je pourrait tester tous les fuseaux horaires ... mais c'est pas terrible.

    L'idéal serai d'utiliser like avec les heures et un AND pour le jour +/- 1 jour, quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	$testheure 	= $expire[2].'-'.$expire[1].'-'.$expire[0].' %%:'.$expire[4].':'.$expire[5]  ; // 2014-03-16 %%:59:29
    	$testjour 	= $expire[2].'-'.$expire[1].'-'.$expire[0] ; // 2014-03-16 
    	$query 	= 'SELECT id FROM table WHERE (date_end LIKE '.$db->quote($testheure).' AND date_end= TODAY(1, '.$db->quote($testjour).') )' ;
    Et meme ca j'arrive pas.

    Si quelqu'un a une idée, ça m'enlèverai une épine du pied, et une grosse !

    Cédric

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'espere que tu réalises que tu fais vraiment du bricolage : tes dates devraient être stockées en GMT.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $jour = $expire[2].'-'.$expire[1].'-'.$expire[0];
    $minsec = $expire[4] . ':' . $expire[5];
     
    $query = 'SELECT id FROM table WHERE date_end BETWEEN DATE_SUB("'. $testheure .'", INTERVAL 1 DAY) AND DATE_ADD("' . $testheure . '", INTERVAL 2 DAY) AND DATE_FORMAT(date_end,"%i:s") =  "' . $minsec . '"';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 94
    Points
    94
    Par défaut
    Merci Sabotage, c'est ce que je cherche.

    Oui je bricole un peu là. Car je lis les tables d' un composant qui n'est pas le mien, donc aucun controle sur le stockage de leur données.

    Je penses que tu as oublié d'initialiser les variables, mais je suppose que c'est ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $jour = $expire[2].'-'.$expire[1].'-'.$expire[0];
    $minsec = $expire[4] . ':' . $expire[5];
     
    $query = 'SELECT id FROM table WHERE date_end BETWEEN DATE_SUB("'. $jour .'", INTERVAL 1 DAY) AND DATE_ADD("' . $jour. '", INTERVAL 2 DAY) AND DATE_FORMAT(date_end,"%i:s") =  "' . $minsec . '"';
    En fait je comprends pas très bien le DATE_ADD("' . $jour. '", INTERVAL 2 DAY)

    Cédric

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si ta date est 2014-03-16 16:59:29, ton amplitude va de 2014-03-15 16:59:29 à 2014-03-17 16:59:29.
    Ta date doit donc être comprise entre 2014-03-15 (1 jour de moins) et 2014-03-18 (2 jours de plus)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2007
    Messages : 162
    Points : 94
    Points
    94
    Par défaut
    Erreur de frappe: ""%i:%s".

    Parfait ! Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trouver les enregistrements avec les dates les plus récentes
    Par fullmetalalchemiste dans le forum Requêtes
    Réponses: 4
    Dernier message: 17/05/2012, 10h05
  2. [WD10] enregistrement de la date et l'heur dans la table
    Par bestmoroco dans le forum WinDev
    Réponses: 2
    Dernier message: 25/03/2012, 22h20
  3. Sélectionner 1 seul enregistrements selon la date la plus grande
    Par Ronaldinho dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/08/2009, 13h26
  4. Trouver un enregistrement selon son numero de ligne
    Par freestyler dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/06/2008, 14h27
  5. [Access] dernier enregistrement selon date
    Par sebos21 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/05/2006, 18h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo