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

MySQL Discussion :

Lecture entre date début et fin


Sujet :

MySQL

  1. #1
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut Lecture entre date début et fin
    Bonsoir,

    Je m'arrache les cheveux depuis hier sur quelque chose qui va peut être vous apparaître très simple :

    J'ai une table adresse dont la description simplifiée est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    id_adresse INT 11
    id_client INT 7
    adresse VARCHAR 100
    date_debut DATE
    date_fin Date
    Un même id_client peut avoir plusieurs adresse.

    Les dates de débuts et de fin me donnent la validité d'une adresse.

    Je me retrouve dans le cas suivant : un client à 2 adresses dont l'une est ouverte depuis le 1 octobre et sans date de fin et l'autre est ouverte du 24 octobre jusqu'au 7 novembre.

    Le client a donc mis une adresse temporaire.

    Ma requete me retourne les 2 adresses alors que je ne voudrais dans le cas présent que la provisoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM clients
    WHERE (CURDATE() < date_fin
    OR adr_date_debut <= CURDATE()
    AND date_fin = '0000-00-00')
    Une suggestion ?

    Merci d'avance

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    peux tu donner un petit exemple de ce que contient ta table et du résultat attendu?

    c'est quoi cette date : '0000-00-00'?? je connais pas de telle date moi

  3. #3
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    La date '0000-00-00', c'était juste pour mettre le format.

    Un exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    id_adresse : 157
    id_client : 14523
    adresse : 47 route des monts
    date_debut : 2007-12-14
    date_fin Date : 0000-00-00
     
    id_adresse : 11512
    id_client : 14523
    adresse : 128 avenue de la plage
    date_debut : 2008-10-24 
    date_fin : 2008-11-07
    La 1ère adresse est permanente, la seconde est temporaire (vacances sûrement). Dans ma requête je dois donc ne retenir que la 2éme adresse puisque je suis dans la période qui va du 24/10 jusqu'au 7 novembre inclus, à partir du 8 je devrai prendre l'autre adresse.

    Merci

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    la date en '0000-00-00' n'est pas terrible, tu risques d'avoir quelques surprises si un jour tu changes de SGBD

    ton critère ne revient il pas à dire que la date du jour est compris entre date_debut et date_fin?

  5. #5
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 381
    Points
    5 381
    Par défaut
    salut,

    Essaie un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM clients
    WHERE (CURDATE() BETWEEN adr_date_debut AND date_fin
    AND date_fin = '0000-00-00') ORDER BY adr_date_debut ASC LIMIT 1
    Tu as tous les mots clés dans cette requête, à toi d'y mettre de l'ordre

    J'espère que tu as fait une erreur dans ton exemple ! La date permanente commence en décembre alors que la provisoire commence en octobre.

    Comme le dit Cybher, ton '0000-00-00' est louche, tu devrait mettre un truc du style '2030-01-01', on plus ça peut simplifier les conditions des requêtes.

  6. #6
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Merci à vous 2.

    La date permanente de début est en décembre, mais de l'année précédente.

    Vous mettriez une date de fin et non pas '0000-00-00'. Je vais faire le nécessaire.

    Oui effectivement ma date du jour doit être compris entre la date de début et de fin.

    Je vais donc mettre une date de fin à '2059-12-31' dans ma base à la place de '0000-00-00'

    Ma requete va donc ressembler à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM clients
    WHERE CURDATE() BETWEEN adr_date_debut AND date_fin
     ORDER BY adr_date_debut ASC LIMIT 1

  7. #7
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    moi personnellement, je mettrais le marqueur NULL s'il n'y a pas de date de fin

  8. #8
    Membre extrêmement actif Avatar de lodan
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 064
    Points : 682
    Points
    682
    Par défaut
    Citation Envoyé par Cybher Voir le message
    salut,

    moi personnellement, je mettrais le marqueur NULL s'il n'y a pas de date de fin
    Comment une date peut-elle être null ?

  9. #9
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    NULL n'est pas une valeur mais un marqueur qui indique une absence de valeur

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

Discussions similaires

  1. [AC-2003] requete sql demandant dates début et fin?
    Par kinkon dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 29/09/2011, 19h18
  2. Dates début et fin pour chaque semaine d'un mois.
    Par smailhop dans le forum VB.NET
    Réponses: 3
    Dernier message: 09/12/2009, 16h45
  3. [PHP 5.2] [Dates] début et fin de mois précédent
    Par kaboume dans le forum Langage
    Réponses: 2
    Dernier message: 13/08/2009, 14h09
  4. Semaine - date début et fin
    Par marion782 dans le forum SQL
    Réponses: 3
    Dernier message: 31/01/2008, 19h08
  5. date début et fin semaine en cours
    Par youness78 dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/08/2007, 11h40

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