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

Langage SQL Discussion :

Requête inadaptée date et heure


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut Requête inadaptée date et heure
    Bonjour,

    J'ai un soucis ma requête , il n'y a pas d'erreur mais elle ne fait pas ce que je veux.
    Exemple je voudrais connaitre s'il y a une présence le 2012-10-12 a 15h (renvoi une ligne mais pour certain paramètre la requête n'est pas valable).

    Si je rentre ces paramètres
    $date = 2012-10-13
    $heure = 1
    La requête ne me renvoi aucune ligne tandis que le 2012-10-13 a 1 j'ai bien une présence (id: 1). Je sais que c'est normal car la requête n'est pas adapté (hd n'a aucun lien avec dd). Mais je n'arrive pas a trouver la requête adéquate.
    J'ai pensé a une sous requête mais je reviens au même problème.

    table presence :
    id_|___dd_______|_____df_____|_hd_|_hf_
    1_|'2012-10-12'__|'2012-10-13'__|_15_|_17
    2_|'2012-10-13'__|'2012-10-14'__|_18_|_19
    requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM presence
    WHERE dd <= '".$date."'
    AND df >= '".$date."'
    AND hd <= ".$heure." 
    AND hf >=".$heure."

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 188
    Points : 12 744
    Points
    12 744
    Par défaut
    Bonjour,
    A mon d'un problème de copier/coller, je pense que le soucis vient du paramètre heure. Si je remplace les paramètres par leur valeur, j'obtiens:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT *
    FROM presence
    WHERE dd <= '2012-10-13'
    AND df >= '2012-10-13'
    AND hd <= 1 
    AND hf >= 1
    Or toutes les heures "hd" sont supérieures à 1.
    Donc il semble normal que la requête ne renvoie rien.

    Tatayo.

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Tu devrais revoir ton modèle de données !
    Si je comprends bien ton explication, sur la ligne 1, la présence est du 12 octobre 2012 à 15 h jusqu'au 13 octobre 2012 à 17 h.
    Pourquoi ne pas avoir fait des colonnes date_heure_debut et date_heure_fin, de type DATETIME au format 'aaaa-mm-jj hh:mm:ss' ?

    En formatant correctement la date et l'heure fournies à la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM presence
    WHERE '".$date.' '.$heure."' BETWEEN date_heure_debut AND date_heure_fin
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    Si je comprends bien ton explication, sur la ligne 1, la présence est du 12 octobre 2012 à 15 h jusqu'au 13 octobre 2012 à 17 h.
    Oui c'est sa
    Pourquoi ne pas avoir fait des colonnes date_heure_debut et date_heure_fin, de type DATETIME au format 'aaaa-mm-jj hh:mm:ss'
    J'ai bien vue mon erreur quand j'ai commencé a faire cette requête le problème malheureusement je ne peux pas retourner en arrière donc il faut que j'arrive a trouver une autre solution.
    Mais en effet j'aurai du utiliser un DATETIME.

    Donc il semble normal que la requête ne renvoie rien.
    J'ai bien compris que c’était normal mais je n'arrive pas trouver.

    J'ai pensé aussi a faire une matrice.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 793
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    14
    Par défaut
    Alors il va falloir formater et comparer des données comparables.
    Essaie ceci, si tes heures sont toujours enregistrées en quantités entières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM presence
    WHERE CAST('".$date.' '.$heure.':00:00'."' AS DATETIME) BETWEEN CAST(CONCAT(dd, ' ', hd, ':00:00') AS DATETIME) AND CAST(CONCAT(df, ' ', hf, ':00:00') AS DATETIME)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 338
    Points : 192
    Points
    192
    Par défaut
    Merci CinePhil.

    Sa va me servir de leçon

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

Discussions similaires

  1. [AC-2007] Requête SQL différence entre deux date en heure
    Par sarah12 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 21/07/2010, 21h58
  2. requète Date et heure courante Access
    Par yannick9 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 27/07/2007, 16h43
  3. récupérer date et heure d'une requête
    Par taffMan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/02/2007, 14h55
  4. [REQ] Requête sur date et heure
    Par benazerty dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 26/06/2006, 14h34
  5. [sql server] requête sur dates et heures (format du résultat
    Par isachat666 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/02/2006, 14h48

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