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

Requêtes MySQL Discussion :

Date, période & sélection


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Date, période & sélection
    Bonjour,

    Je cherche désespérément une requête avec MySQL me permettant de sélectionner une liste de produit disponible (ou non disponible) entre 2 dates.

    J'ai 2 tables:

    PRODUIT
    IdProduit Nom
    1 Produit1
    5 Produit2
    7 Produit3


    CALENDRIER
    IdProduit dtDebut dtFin tarif
    1 01/09/2014 15/09/2014 100
    1 16/09/2014 30/09/2014 200
    1 05/10/2014 17/10/2014 150
    5 10/09/2014 30/09/2014 150
    5 05/11/2014 27/11/2014 100


    La table calendrier contient plusieurs périodes (dtDebut à dtFin) pour un même produit.
    Aucune période ne se chevauchent pour un même produit.
    Toutes autres périodes non enregistrées est considérée comme non disponible.


    Comment afficher la liste de tous les produits disponible entre le 01/09/2014 et le 20/09/2014 ???
    => Produit1

    Comment afficher la liste de tous les produits disponible entre le 12/09/2014 et le 25/09/2014 ???
    => Produit1 & Produit2

    Comment afficher la liste de tous les produits disponible entre le 25/09/2014 et le 15/10/2014 ???
    => Aucun produit sélectionné

    Et pour finir, trouver le nombre de produit dispo entre 2 dates ?
    ex: Entre le 12/09/2014 et le 25/09/2014 => 2
    Entre le 01/12/2014 et le 15/12/2014 => 0

    PS: Le produit doit être disponible sur toute la période pour être sélectionné


    Cordialement,
    Isabelle

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    Nous ne sommes pas là pour faire votre travail à votre place.

    Avez-vous commencé quelque chose ?

    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour Chtulus et désolé de lire cette réponse si brutale qui n'apporte rien à mon problème.

    Si je me permet de créer ce post, c'est bien parce que je suis désespéré après des heures de recherche et même sur ce forum.
    D’ailleurs c'est mon 1er post sur ce forum depuis plusieurs années. J'ai toujours chercher et essayer de me débrouiller seul avant de demander quoi que ce soit à quelqu'un.
    J'ai bien retrouvé un sujet similaire mais la solution proposée n'est pas juste.

    J'ai bien l'impression de chercher quelque chose d’impossible avec cette structure de données.
    Dois je changer la structure ou est faisable ?
    Si quelqu'un me confirme la faisabilité des requêtes en gardant cette structure, je vous laisse tranquille et je continuerai à chercher dan mon coin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT NomProduit FROM
    produit P INNER JOIN calendrier C ON P.Idproduit = C.Idproduit
    WHERE ('12/09/2014' BETWEEN dtDebut AND dtFin) AND ('25/09/2014' BETWEEN dtDebut AND dtFin)
    Voila ma requête Chtulus !!
    As tu quelques chose de mieux à me proposer ??

    Cordialement,
    Isabelle

  4. #4
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    re,

    Il n'y a rien de brutal dans ma réponse, désolé si vous l'avez compris ainsi.

    Votre clause WHERE est fausse.

    Si vous cherchez entre 2 dates :
    • Supérieur à dtDebut
    • Inférieur à dtFin


    WHERE dtDebut > '12/09/2014' AND dtFin < '25/09/2014'


    Vous avez tapez Between dans Google ?
    Alors dire "je cherche", je ne trouve pas, c'est un peu frustrant quand même.



    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    La clause "BETWEEN" fonctionne correctement tel que je l'ai écrit.
    Mais je reconnais que la clause "WHERE" dans ce cas est plus propre.

    De toute façon ma structure ne permet pas de retrouver une période qui s'étend sur plusieurs enregistrement.
    J'ai donc décidé d'ajouter une table supplémentaire.

    IdProduit dtDebut dtFin tarif
    1 01/09/2014 15/09/2014 100
    1 16/09/2014 30/09/2014 200
    ......
    ......

    Ce qui donnera sur la nouvelle table

    1 01/09/2014 30/09/2014

    En fait c’était çà mon véritable problème.
    A partir de ça, plus de soucis pour les requête.

    PS: Ce post peut être noté résolu.

    Cordialement,
    Isa

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    si vous devez effectuer souvent ce type de requete, vous devriez ajouter une/des table(s) calendrier dans votre base, contenant tous les jours sur la période concernée.

    Avec une telle table, votre requete deviendrait plus simple à écrire

Discussions similaires

  1. Intervales de dates / périodes
    Par itklif2 dans le forum Langage
    Réponses: 3
    Dernier message: 22/03/2014, 13h34
  2. [date] Période du N° de semaine
    Par Cyrille36 dans le forum Développement
    Réponses: 4
    Dernier message: 20/06/2011, 11h52
  3. [XL-2007] Somme entre deux dates (période)
    Par Olivm dans le forum Excel
    Réponses: 4
    Dernier message: 16/03/2011, 09h15
  4. [VxiR2] Indicateur conditionné par la présence d'une date dans la sélection
    Par ouistitis dans le forum Designer
    Réponses: 5
    Dernier message: 09/06/2009, 17h43
  5. Calcul de date (période de l'année)
    Par Daniel-Gérald dans le forum VBA Access
    Réponses: 1
    Dernier message: 06/06/2008, 17h09

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