Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2010, 14h50   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 10
Points : 2
Points : 2
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 :
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 :
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.
alsab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 16h28   #2
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
Bonjour,
Tu peux faire ainsi:
Code SQL :
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.
tatayo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 29/12/2010, 16h54   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 10
Points : 2
Points : 2
Merci tatayo.

Bien vu.
alsab est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h15.


 
 
 
 
Partenaires

Hébergement Web