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 :

recherche via un interval de temps (trimestre / semestre)


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Par défaut recherche via un interval de temps (trimestre / semestre)
    bonjour,

    voici la strucutre de ma table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TRIMESTRE (int) | ANNEE (int) | AUTRES CHAMPS
    je voudrais créer une requête me retournant les résultats compris entre deux trimestre.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM MA_TABLE
    WHERE ((TRIMESTRE >= 1 AND ANNEE >= 1998) AND (TRIMESTRE <= 4 AND ANNEE <= 1998))
    Cette exemple fonctionne sans problème. Par contre l'exemple suivant déconne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM MA_TABLE
    WHERE ((TRIMESTRE >= 4 AND ANNEE >= 1998) AND (TRIMESTRE <= 2 AND ANNEE <= 1999))
    Cette requête me retourne aucun résultat car elle recherche individuellement chaque critère sans prendre en compte le paranthésage. Donc les deux critères sont incompatibles.

  2. #2
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Citation Envoyé par erwan.bodere
    WHERE ((TRIMESTRE >= 4 ... AND (TRIMESTRE <= 2
    Ces deux conditions sont antinomiques. Pour ma part je mettrais plutôt un OR entre les 2 propositions.

    Par ailleurs peut-être qu'une seule colonne de type DATE serait plus pratique. Le trimestre d'une date peut être obtenu grâce à la fonction QUARTER().

    Voir aussi http://pcaboche.developpez.com/artic...ns-date-heure/

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Par défaut
    je ne peux pas ajouter de champ au format date car il s'agit d'une table de statistiques qui tourne en exploitation depuis 1998.

    Ta proposition de mettre un OR ne fonctionne pas car les résultats contiennent des données hors interval.

  4. #4
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Et comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (TRIMESTRE >= 4 AND ANNEE = 1998) OR (TRIMESTRE <= 2 AND ANNEE = 1999)
    Si la plage de recherche s'étend sur plusieurs années, rajoute ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OR (année between [année début +1] AND [année fin -1])
    Malheureusement, avec un type de colonne mal adapté, il faut prendre en compte tous les cas de figure un par un... c'est un petit exercice de logique.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Par défaut
    J'ai opté pour la solution suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT ...
    FROM ...
    WHERE CONCAT(TRIMESTRE,'/',ANNEE) IN ('4/1998', '1/1999', ...)
    Dans le code php je recherche l'ensemble des périodes possibles par rapport à l'interval saisi et j'ajoute ces périodes dans un liste de valeurs (IN)

  6. #6
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    C'est une possibilité mais je doute que les performances suivent (pas d'utilisation d'index à cause du CONCAT...)

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

Discussions similaires

  1. [Conception] recherche via plusieurs listes déroulantes
    Par chicho dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/03/2007, 17h56
  2. [MySQL] rechercher via une liste déroulante
    Par chicho dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 06/03/2007, 14h45
  3. [MySQL] Sélectionner dans un interval de temps
    Par morgan47 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/02/2007, 23h56
  4. [MySQL] Calculer un interval de temps (timestamp)
    Par krolineeee dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/06/2006, 17h34
  5. [VB.NET] vb.net : process et interval de temps
    Par 1coni dans le forum Windows Forms
    Réponses: 10
    Dernier message: 05/06/2006, 10h10

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