cobra_sa Posté(e) le 18 janvier 2008 Partager Posté(e) le 18 janvier 2008 Bonjour a tous, desoler, je viens quemander votre aide car je sais plus ou j'ai mis mon cerveau. Select Cobra.cerveau FROM .... heuuu j'en peu plus des requettes SQL. Bon, je vous explique. 1 table, deux champs, jusque la rien de complique. Champ1 = user_id (autrement dit, l'identifiant d'un utilisateur dont nom et prenom se retrouverons dans une autre table) Champ2 = group_id (autrement dit, une reference a un groupe dont blablabla) sachant qu'un utilisateur peux appartenir a plusieurs groupes. Comment ecrire la requette pour selectionner les users qui font partie du groupe A ET du groupe B. J'ai bien essayer SELECT `user_id` WHERE `group_id`=A AND `group_id`=B; mais rien qu'a voir la requette on se dit bien qu'il va y avoir comme un soucis. J'my remettrai dans 30 minutes (c'etait pour hier bien entendu que je devais rendre le truc). Vais faire une pause clope. Un peu de goudrons me remettra peut etre la tete en place. Cobra Lien vers le commentaire Partager sur d’autres sites More sharing options...
PiFou86 Posté(e) le 18 janvier 2008 Partager Posté(e) le 18 janvier 2008 il suffit de faire l'intersection entre les résultats des utilisateurs du groupe a et des utilisateurs du groupe b..... donc l'intersection de deux requettes select Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabien29200 Posté(e) le 22 janvier 2008 Partager Posté(e) le 22 janvier 2008 +1 SELECT `user_id` WHERE `group_id`=A INTERSECT SELECT `user_id` WHERE `group_id`=B; Lien vers le commentaire Partager sur d’autres sites More sharing options...
RaphAstronome Posté(e) le 12 février 2008 Partager Posté(e) le 12 février 2008 SELECT `user_id` WHERE `group_id`="A" or `group_id`="B"; L'un ou l'autre ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 8 mai 2008 Partager Posté(e) le 8 mai 2008 ton tableau, tu le remplis bien avec genre user 1 group 1, user 1 group 2, user 2 group 1, user 3 group 2, .... ? donc, comme l'a deja dit fabien, SELECT user_id FROOM table WHERE group_id="A" INTERSECT SELECT user_id FROM table WHERE group_id="B" Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 9 mai 2008 Partager Posté(e) le 9 mai 2008 Sauf erreur de ma part (je ne suis pas un pro en sql), le or évite de faire deux requettes. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 9 mai 2008 Partager Posté(e) le 9 mai 2008 avec le OR tu aurais user 1 (group 1) user 1 (group 2) etc. le INTERSECT permet d'eviter les doublons Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 9 mai 2008 Partager Posté(e) le 9 mai 2008 Donc pour toi SELECT 'user_id' WHERE 'group_id'=A OR 'group_id'=B; peut renvoyer des doublons. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 9 mai 2008 Partager Posté(e) le 9 mai 2008 oui: mysql> CREATE TABLE toto (user INT, grp INT); Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO toto VALUES (1, 1), (1, 2), (2, 1), (2, 2), (3, 1); Query OK, 5 rows affected (0.00 sec) Records: 5 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM toto; +------+------+ | user | grp | +------+------+ | 1 | 1 | | 1 | 2 | | 2 | 1 | | 2 | 2 | | 3 | 1 | +------+------+ 5 rows in set (0.00 sec) mysql> SELECT user FROM toto WHERE grp=1; +------+ | user | +------+ | 1 | | 2 | | 3 | +------+ 3 rows in set (0.00 sec) mysql> SELECT user FROM toto WHERE grp=1 OR grp=2; +------+ | user | +------+ | 1 | | 1 | | 2 | | 2 | | 3 | +------+ 5 rows in set (0.00 sec) mysql> Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 9 mai 2008 Partager Posté(e) le 9 mai 2008 SELECT DISTINCT user FROM toto WHERE grp=1 OR grp=2 ? Mais de toute facon, cette requete ne réponds pas à la question Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 9 mai 2008 Partager Posté(e) le 9 mai 2008 oui pour le distinc, mais en effet, ca ne repond pas, car de toute facon, avec un OR, on ne recupere pas les membres du groupe un ET du group deux Lien vers le commentaire Partager sur d’autres sites More sharing options...
Spaz001 Posté(e) le 9 mai 2008 Partager Posté(e) le 9 mai 2008 En fait, ca se fait en une seule requete ^^ SELECT user_id FROM toto WHERE group_id = 1 or group_id = 2 GROUP BY user_id HAVING COUNT(user_id) = 2 Lien vers le commentaire Partager sur d’autres sites More sharing options...
bensor Posté(e) le 9 mai 2008 Partager Posté(e) le 9 mai 2008 En fait, ca se fait en une seule requete ^^SELECT user_id FROM toto WHERE group_id = 1 or group_id = 2 GROUP BY user_id HAVING COUNT(user_id) = 2 Je dirais même plus : SELECT user_id FROM toto WHERE group_id IN (1, 2) GROUP BY user_id HAVING COUNT(user_id) = 2; Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.