Bonjour a tous,
J'utilise un CMS (drupal pour ne pas le citer) qui permet de creer des profiles pour les utilisateurs.
Les profiles sont stockes ds une table:
L'idee est que je souhaite recuperer les utilisateurs qui ont exactement 2 valeurs de profile, disons par exemples tous les utilisateur du departement (fid=2) IT (value='IT') et du pays (fid=4= France (value='France').
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 CREATE TABLE `profile_values` ( `fid` int(10) unsigned default '0', `uid` int(10) unsigned default '0', `value` text, KEY `uid` (`uid`), KEY `fid` (`fid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; --Ce qui me donne fid uid value ----------------------------- 2 1 IT 2 2 IT 4 2 France 2 5 Sales 4 5 Canada 4 6 France 2 6 IT
Pour cela j'ai pense a la requete suivante:
Mais je ne la trouvais pas tres "jolie" ds le sens ou a chaque critere que je rajoute je dois rajouter un LEFT JOIN et remettre ma table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT p1.uid FROM `profile_values` p1 LEFT JOIN `profile_values` p2 ON p1.uid = p2.uid WHERE p1.fid = 2 AND p1.value = 'IT' AND p2.fid = 4 AND p2.value = 'France'
Si il y a 10 criteres, ca fait 10 fois la meme table ...
Ai-je raison de m'inquieter ?
Y a t-il une maniere plus optimale de realiser ceci ?
D'avance merci de vos commentaires.
Partager