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 :

problème de date !


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut problème de date !
    coucou
    Je ne sais plus trop ce que je dois envoyer à mysql !
    En gros j'essaye de trouver des enregistrements entre deux dates avec une requete de la forme :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM messages WHERE dateHeure between '2007-02-19' and '2007-03-20' AND (etat='0' OR etat='1' OR etat='3')

    mais par exemple pour ce cas il m'a retourné un enregistrement du 2007-02-19 mais pas du 2007-03-20 ...

    de plus je dois aussi trouver des enregistrements sur une date unique et là je bloque ...
    j'ai regardé toutes les fonctions de date_time de mysql et j'ai rien trouvé !

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM messages WHERE dateHeure = '2007-02-19'
    pourquoi ne peux t on pas écrire cela comme ca ?

  2. #2
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Les requêtes me semblent bonnes. Est-ce que le format correspond à ce qui est déclaré dans la base ? Par exemple, si la colonne 'dateHeure' est un timestamp, ça ne va pas marcher. Sur MySQL, le format 'yyyy-mm-dd' correspond au type 'datetime'.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    hum ...
    en fait dans ma base j'enregistre des date yyyy-mm-dd hh:mm:ss dans une colonne DateTime
    mais je ne peux rechercher que sur du "yyyy-mm-dd" ...

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM messages WHERE dateHeure between '2007-02-19 00:00:01' and '2007-03-20 23:59:59' AND (etat='0' OR etat='1' OR etat='3')

    Pour obtenir cette requête tu concatènes l'heure "à la main", ca peut être une solution ?
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  5. #5
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Oui, ça ne devrait pas être bloquant. En tout cas, chez moi, ça marche

    Au risque de poser des questions bêtes :

    1 - pour ta requête
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM messages 
    WHERE dateHeure between '2007-02-19' and '2007-03-20' 
    AND (etat='0' OR etat='1' OR etat='3')
    qui ne renvoie qu'un enregistrement du 2007-02-19 mais pas celui du 2007-03-20 (ce qui, soit dit en passant, prouve que le format est accepté), est-ce que ce n'est pas du à la colonne 'etat' (deuxième partie de la requête après le AND) ?

    2 -
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM messages WHERE dateHeure = '2007-02-19'
    pourquoi ne peux t on pas écrire cela comme ca ?
    Quelle erreur te renvoie le sgbd ?

  6. #6
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    1 - Non il ne me semble pas que cela vienne de Etat
    2 - Le sgbd ne me renvoit rien ! Pas d'enregistrements

    (Ratapapa) Je n'ai pas de problèmes avec l'heure dans le cas du between ... c'est ca qui m'échappe aussi ..

    Donc en fait dans ma table j'ai des enregistrements type :
    2007-02-19 15:49:37
    2007-02-14 13:31:22

    et moi je voudrais qu'en écrivant
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM messages WHERE dateHeure = '2007-02-14'
    il me sorte le deuxième ... or ce n'est pas le cas (le bougre !!)

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Juin 2005
    Messages : 572
    Points : 716
    Points
    716
    Par défaut
    Voila pourquoi j'utilise systématiquement des varchar pour stocker mes dates

    Sinon une requete comme ceci :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * FROM messages WHERE dateHeure LIKE '2007-02-14' 
     
    //ou ceci 
    SELECT * FROM messages WHERE dateHeure LIKE '2007-02-14%'

    te donne quoi ?
    Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

    Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    lol on a eu la même idée en mm temps ...
    J'allais répondre en disant que j'avais pris un VARCHAR et un LIKE ...
    thx

  9. #9
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Des varchar pour stocker les dates... C'est une façon de dissimuler le problème, pas vraiment de le résoudre.

  10. #10
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Points : 63
    Points
    63
    Par défaut
    En réalité la commande BETWEEN effectue entre guillemets la recherche suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM messages WHERE dateHeure BETWEEN '2007-02-19 00:00:00' AND '2007-03-20 00:00:00' AND (etat='0' OR etat='1' OR etat='3')
    ce qui explique pourquoi il ne trouve pas les enregistrements effectués après 00:00:00

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    a bon ? et y a t il un moyen de contourner cela ?

    (Herode) Tout de facon la solution avec LIKE marche aussi si je mets une colonne dateTime jviens d'essayer ...

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 70
    Points : 63
    Points
    63
    Par défaut
    Comme ça mais je ne sais pas si c'est la meilleur façon de faire

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM messages WHERE dateHeure BETWEEN '2007-02-19' AND DATE_ADD( '2007-03-20', INTERVAL 1
    DAY )  AND (etat='0' OR etat='1' OR etat='3')

    Le problème c'est que cela ramènera également les enregistrements de 2007-03-21 00:00:00 si je ne me suis pas trompé.

  13. #13
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    151
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Novembre 2004
    Messages : 151
    Points : 106
    Points
    106
    Par défaut
    hum ... ok ...
    je vais essayer ca merci

Discussions similaires

  1. Problème de date dans requête de màj imbriquée
    Par VirginieGE dans le forum Langage SQL
    Réponses: 11
    Dernier message: 20/07/2004, 15h34
  2. problème de date
    Par baboune dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 10/06/2004, 10h52
  3. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 11h21
  4. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 15h05
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

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