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 :

[Mysql] requête multi-criteres


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 23
    Points : 7
    Points
    7
    Par défaut [Mysql] requête multi-criteres
    salut à tous,

    je dispose d'une table catalogue_critere (id_catalogue,id_type,valeur) listant l'ensemble des valeurs de critere de différents articles

    exemple :

    id_catalogue | id_type | valeur
    1 | 1 | "Rouge"
    1 | 2 | "Renault"
    1 | 3 | 100
    2 | 1 | "Rouge"
    2 | 2 | "Peugeot"
    2 | 3 | 100
    3 | 1 | "Jaune"
    3 | 2 | "Peugeot"
    3 | 3 | 100



    pour certain critere l'utilisateur pour indiquer un min et un max, dans l'ex pour l'id_type 3
    je souhaite faire une requête recherchant les id_catalogue correspondant au type 1 de valeur "Rouge" et de type 2 de valeur comprise entre min et max , valeur données par l'utilisateur.

    j'ai essayé des requetes imbriquées :

    select * from catalogue_critere where id_type=1 and valeur="Rouge" and exists (select * from catalogue_critere where id_type=3 and valeur>min and valeur<max)

    mais ca donne une erreur.
    si vous avez une piste.
    merci

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM catalogue_critere WHERE (id_type=1 AND valeur="Rouge") OR (id_type=2 AND valeur BETWEEN min AND max)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    j'avais deja fait cette requete, mais elle retourne les resultats correspondant à id_type=1 de valeur Rouge ou id_type=3 de valeur comprise entre min et max. On peut donc avoir en retour une voiture Rouge mais dont le type 3 ne correspond pas au critere demandé.

  4. #4
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    bah ta colonne valeur est un varchar on dirai alors c pas genial de faire un min et un max la dessus

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    certe, alors ne considerons plus le min et la max.
    ma demande est juste pour la requete sur plusieurs critere,
    on peut le voir comme ceci :
    id_type=1 de valeur "Rouge" et id_type=3 de valeur 100
    la requete devrait retourner comme id_catalogue 1 et 2

  6. #6
    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

    essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select id_catalogue from catalogue_critere 
    where ((id_type = 1 and  valeur ='rouge') 
    or (id_type=3 and valeur = '100')) 
    group by id_catalogue
    having count(id_catalogue) = 2

  7. #7
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Essaies :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM
      catalogue_critere a INNER JOIN catalogue_critere b ON a.id_catalogue=b.id_catalogue
    WHERE
       a.id_type=1 AND a.valeur='Rouge' AND b.id_type=3 AND b.valeur>[ValeurMin] AND b.valeur<[ValeurMax]
    
    Bon courage

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Yanika_bzh, ta requete fonctionne dans l'exemple avec deux criteres.
    mais il peut y avoir n criteres, dans l'exemple, on pourrait avoir une requete recherchant les catalogue pour les criteres suivants :
    id_type=1 de valeur Rouge
    id_type=3 de valeur 100
    id_type=2 de valeur Peugeot

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    j'ai teste en ajoutant un INNER JOIN catalogue_critere c ON et AND b.id_catalogue = c.id_catalogue
    ça marche, mais ce n'est pas tres pratique à générer automatiquement en php.
    y aurait il une autre methode

Discussions similaires

  1. Requêtes multi-base
    Par nicolchr dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 12/11/2014, 11h50
  2. Réponses: 3
    Dernier message: 04/03/2012, 17h43
  3. Requête multi criteres
    Par xeros3333 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/07/2007, 08h48
  4. [MySQL] ecriture d'une requête multi-critères
    Par webdestination dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/08/2006, 11h34
  5. Requête multi-base
    Par Vituret dans le forum Débuter
    Réponses: 1
    Dernier message: 04/04/2005, 16h41

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