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 :

Rechercher un intervale de durée [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Par défaut Rechercher un intervale de durée
    Bonjour,

    Je travail sous php 5 et mysql 5

    j'ai lu plusieurs post ici qui traite des recherches par date mais aucun ne correspond à mon problème donc je vous l'expose.

    Ce que je veux faire c'est rechercher une saison ou plus. Une saison est défini pour une date de début et une date de fin.

    Les deux champs qui enregistre les dates dans la table saison sont au format date (aaaa-mm-jj).

    J'ai un formulaire pour la recherche qui demande de saisir une date de début et une date de fin (tout est au bon format aaaa-mm-jj).

    Donc pour effectuer la recherche je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM Saison 
    WHERE Lim_basse <= '".$Date_debut."' 
    AND Lim_haute >= '".$Date_fin."'
    Cette requête marche partiellement car si ma date début est sur la saison 1 et que ma date de fin est sur la saison 2 par exemple du coup rien ne retourne aucun résultat.

    Exemple :

    Saison 1 => début : 2007-12-15 / fin : 2008-05-30
    Saison 2 => début : 2008-05-31 / fin : 2008-07-30

    Soit la recherche suivante => début : 2008-01-23 / fin 2008-03-01
    La requête vas bien me retourner la saison 1. de même si je fais une recherche ou là date de début est supérieur ou égale au début d'une saison et dont la la date de fin est inférieur ou égal à la date de fin de saison.

    Si la date de fin pour la recherche fait partie d'une autre saison, aucun résultat n'ai retourné
    Ex: recherche => début : 2008-01-23 / fin 2008-06-01
    Retourne aucun résultat alors que je voudrai que ça me retourne Saison 1 et Saison 2.

    Merci d'avance si voyais comment faire

  2. #2
    Membre émérite Avatar de sharrascript
    Homme Profil pro
    Développeur Web indépendant
    Inscrit en
    Avril 2007
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web indépendant

    Informations forums :
    Inscription : Avril 2007
    Messages : 678
    Par défaut
    Bonsoir,

    Je ne suis pas sûr d'avoir tout piger.

    Mais si tu veux avoir les saisons qui tombe dans les bonnes tranches, enlève le AND et remplace le par OR.

    Ensuite, le plus logique est d'inverser les supérieurs et inférieurs, il me semble que le bon code serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM Saison 
    WHERE Lim_basse >= '".$Date_debut."' 
    OR Lim_haute <= '".$Date_fin."'
    Mais je peux me tromper

    ++

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Par défaut
    nop pas possible d'inverser parce que la date début ne peux pas être inférieur à la date de début d'une saison et la date de fin ne peux pas être supérieur à la date de fin d'une saison.

    Et mettre un OR ça ne vas non plus enfin je crois faut que je teste car une saison est défini par une date de début et une date de fin et le moteur de recherche permet de choisir une date de début et une date de fin.

    Il faut donc qu'avec ces deux date je sache dans quelles saison je me trouve.

    Si jamais vous ne comprenez pas demander moi quel point je dois éclaircir

  4. #4
    Membre émérite Avatar de sharrascript
    Homme Profil pro
    Développeur Web indépendant
    Inscrit en
    Avril 2007
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web indépendant

    Informations forums :
    Inscription : Avril 2007
    Messages : 678
    Par défaut
    Citation Envoyé par polemoss
    nop pas possible d'inverser parce que la date début ne peux pas être inférieur à la date de début d'une saison et la date de fin ne peux pas être supérieur à la date de fin d'une saison.
    C'est donc bien ce que j'ai mis dans mon code, tu va chercher toutes les saisons qui contiennent un résultat compris entre une date de début et une date de fin.

    Ensuite, si tu met un AND, c'est une condition obligatoire donc si la demande n'est pas comprise obligatoirement entre les deux = pas de résultat, donc ce que tu souhaite est impossible.

    exemple:
    Saison 1 => début : 2007-12-15 / fin : 2008-05-30
    Saison 2 => début : 2008-05-31 / fin : 2008-07-30

    Soit la recherche suivante => début : 2008-01-23 / fin 2008-03-01

    Pour choisir une saison tu dois bien sortir une date de début supérieur ou égale à 2008-01-23 (donc Lim_basse >= '".$Date_debut."') ensuite une date de fin inférieur ou égale à 2008-03-01 (donc Lim_haute <= '".$Date_fin."')

    Puis si tu met un AND la saison 2 ne peut pas être choisie car la date de début est inférieur, alors qu'avec le OR pas de soucis, seulement une des deux conditions doit être bonne, ce qui me parait logique.

    Voilà ++

  5. #5
    Membre confirmé Avatar de greg13
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 144
    Par défaut
    Après y avoir quand même bien réfléchi, je pense que la solution est plus compliquée, voilà ce que je propose, mais sans grande certitude, faudrait tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    "
    SELECT * FROM Saison 
    WHERE 
    ( Lim_haute >= '".$Date_debut."' AND Lim_haute <= '".$Date_fin."' )
    OR
    ( Lim_basse >= '".$Date_debut."' AND Lim_basse <= '".$Date_fin."')
    "
    J'ai supposé que l'on peut mettre des parenthèse dans la requete, je n'ai jamais fait ça donc, je suis pas certain. Mais voilà mon idée

    Greg

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Par défaut
    Citation Envoyé par sharrascript Voir le message
    exemple:
    Saison 1 => début : 2007-12-15 / fin : 2008-05-30
    Saison 2 => début : 2008-05-31 / fin : 2008-07-30

    Soit la recherche suivante => début : 2008-01-23 / fin 2008-03-01

    Pour choisir une saison tu dois bien sortir une date de début supérieur ou égale à 2008-01-23 (donc Lim_basse >= '".$Date_debut."') ensuite une date de fin inférieur ou égale à 2008-03-01 (donc Lim_haute <= '".$Date_fin."')

    Puis si tu met un AND la saison 2 ne peut pas être choisie car la date de début est inférieur, alors qu'avec le OR pas de soucis, seulement une des deux conditions doit être bonne, ce qui me parait logique.

    Voilà ++
    Bon j'ai tester donc je te réponds pas dans le vide

    Si je recherche une saison dont le début de la saison est supérieur à la date de début recherchée et que je recherche en même temps via la condition OR une date de fin de saison inférieur à la date de fin recherchée cela me retourne toutes les saisons de ma table Saison ce qui est somme toute logique donc autant faire un SELECT * FROM Saison et je traite ensuite en PHP par dichotomie, chose que je voudrais justement éviter de faire pour plus de rapidité d'exécution.

    Ceci dit je suis d'accord avec toi que l'opérateur AND n'est pas approprié car s'il y a un chevauchement de saison les conditions ne sont pas remplis, donc ça retourne aucun enregistrement c'est normale.

    Quant à la proposition de greg je suis ok avec toi sur le faite que ça parait simple mais que ça ne l'est pas lol je me suis fait moi même surprendre je pensais régler cette requête en quelques minutes, mais t'a proposition n'est pas bonne je l'ai également tester et cela ne retourne aucun résultat et c'est logique.
    Car tu recherche :
    1 ) une date de fin de saison qui soit supérieur à la date début recherchée avec une date de fin de saison qui soit inférieur à la date de fin de saison recherchée.
    ou
    2) une date de début de saison qui soit supérieur à la date début recherchée avec une date de début de saison qui soit inférieur à la date de fin de saison recherchée.

    Donc c'est pas bon tout ça.

    De mon côté je n'ai guère avancé plus (Je me suis surtout éclairci les idées sur la requête) mais je vous tiens au courant en espérant qu'on trouve une soluce )

    A + dans pas trop longtemps j'espère

  7. #7
    Membre émérite Avatar de sharrascript
    Homme Profil pro
    Développeur Web indépendant
    Inscrit en
    Avril 2007
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web indépendant

    Informations forums :
    Inscription : Avril 2007
    Messages : 678
    Par défaut
    Re polemoss,

    Citation Envoyé par polemoss
    Si je recherche une saison dont le début de la saison est supérieur à la date de début recherchée et que je recherche en même temps via la condition OR une date de fin de saison inférieur à la date de fin recherchée cela me retourne toutes les saisons de ma table Saison ce qui est somme toute logique donc autant faire un SELECT * FROM Saison et je traite ensuite en PHP par dichotomie, chose que je voudrais justement éviter de faire pour plus de rapidité d'exécution.
    Avec combien de saisons traite tu??

    Si tu traite avec 2 saisons et qu'elles sont toutes deux comprises entre l'intervalle, normal que cela te ressorte tout.

    Ensuite, à tu bien inversé comme je l'ai fait supérieur et inférieur, parce que avec ce que je t'ai donné comme code, je te certifie que si tu fais une requête avec :

    début : 2007-01-23 / fin 2007-03-01

    Aucune des 2 saisons ne ressortira, donc c'est très loin du SELECT * FROM Saison

    Voilà ++

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

Discussions similaires

  1. Rechercher des intervalles dans une table
    Par Allegro dans le forum Requêtes
    Réponses: 11
    Dernier message: 11/12/2012, 21h42
  2. [XL-2010] Besoin Usf qui permet recherche selon intervalle de date
    Par duplaly dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/03/2011, 21h49
  3. [libxml2] Recherche d'intervalle
    Par moisix dans le forum XML
    Réponses: 0
    Dernier message: 21/04/2010, 01h06
  4. recherche multicritère - intervalle dates
    Par melitoriva dans le forum IHM
    Réponses: 2
    Dernier message: 03/01/2008, 15h11
  5. intervalle de temps ds recherche
    Par fsautejeau dans le forum Access
    Réponses: 13
    Dernier message: 21/07/2006, 09h30

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