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 :

Besoin d'aide pour structure de tables avec Mysql


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Besoin d'aide pour structure de tables avec Mysql
    Bonjour,

    Je rencontre un problème sur la conception de ma bdd. Je vous explique.
    J'ai une table 'users' avec id/nom/prenom.
    Et une autre table 'categorie' avec id/cat/value

    Par exemple:
    table user
    1/pierre/dupont
    2/paul/richard

    table categorie
    1/3/6
    1/3/8
    1/5/5
    2/3/6
    2/4/9
    ...

    Admettons que je cherche les users qui dans la categorie 3 ont la value 6 ou 8:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT tab1.id, tab1.prenom, tab1.nom FROM users as tab1 INNER JOIN categorie as tab2 ON tab1.id = tab2.id WHERE tab2.cat = 3 AND tab2.value IN (6,8)
    Maintenant, et c'est là que se trouve mon problème, si je cherche les user les users qui dans la categorie 3 ont la value 6 et 8:

    Comment puis je faire?
    Il y a la solution de faire plusieurs INNER JOIN:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT tab1.id, tab1.prenom, tab1.nom FROM users as tab1 INNER JOIN categorie as tab2 ON tab1.id = tab2.id INNER JOIN categorie as tab3 ON tab1.id = tab3.id WHERE (tab2.cat = 3 AND tab2.value = 6) AND (tab3.cat = 3 AND tab3.value = 8)
    Là ça pourrait aller, mais si j'ai 50 choix de value je vais pas faire 50 INNER JOIN.

    Donc voilà où j'en suis. Il y a sûrement une solution beaucoup plus simple mais là je ne vois pas.
    Si quelqu'un à une idée je suis preneur.

    Merci et bonne fêtes de fin d'année.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Tu peux faire ainsi:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT tab1.id, tab1.prenom, tab1.nom FROM users AS tab1 INNER JOIN categorie AS tab2 ON tab1.id = tab2.id WHERE tab2.cat = 3 AND tab2.value IN (6,8)
    group by tab1.id, tab1.prenom, tab1.nom
    having count(*) = 2

    Tatayo.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci tatayo.

    Bien vu.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/10/2008, 14h27
  2. Besoin d'aide pour parcours de table SQL Server
    Par Monkey_D.Luffy dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/06/2008, 09h40
  3. Réponses: 22
    Dernier message: 20/05/2008, 10h25
  4. Réponses: 2
    Dernier message: 22/08/2007, 14h39
  5. besoin d'aide -> requete sur 2 tables avec count()
    Par parksto dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/10/2005, 19h06

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