ugrás a tartalomhoz

Egy megadott csoportban NEM előforduló tagok listázása (MySQL)

fchris82 · 2006. Ápr. 16. (V), 11.48
Adott 2 tábla:

user {id}
group_member {uid, gid}

Mondjuk vannak felhasználók 1-10-ig, és a 3. csoportnak tagja a 4-es, 7-es és 9-es felhasználó. Én szeretném kilistáztatni tehát az 1,2,3,5,6,8,10-es felhasználót.

Persze ezt meg tudom oldani kerülővel PHP alatt, vhogy így, de az nem elég szép :)
  1. SELECT  
  2.   users.id,  
  3.   out_users.id,  
  4.   group_member.gid AS group_id  
  5. FROM  
  6.   users AS out_users  
  7. LEFT JOIN  
  8.   (users  
  9. JOIN  
  10.   group_member  
  11. ON  
  12.   group_member.gid=3 AND group_member.uid=users.id)  
  13. ON  
  14.   users.id=out_users.id  
  15. WHERE  
  16.   users.id=out_users.id  
Ez kilistázza az összes felhasználót (a users.id csak ellenőrzés miatt került a kilistázandó elemekhez) és amelyik tagja a csoportnak, annak group_id-ja 3, amelyik nem, annak mind NULL.
 
1

lehet fordítva kéne

pim · 2006. Ápr. 16. (V), 16.18
a group_member-ből select-elsz, és ahhoz join-oltatod a user-t, where-be meg gid<>3 -at írsz.
2

NOT IN?

Hodicska Gergely · 2006. Ápr. 16. (V), 17.40
Ez nem jó így?
  1. SELECT  
  2.   u.id  
  3. FROM  
  4.   users u  
  5. WHERE  
  6.   u.id NOT IN (SELECT g.uid FROM group_member g WHERE g.gid != 3)  
Felhő
3

Majdnem nyert :)

fchris82 · 2006. Ápr. 16. (V), 19.37
Ez a NOT IN működött, csak a végén a '!=' helyett '=' kellett :D
  1. SELECT  
  2.   u.id  
  3. FROM  
  4.   users u  
  5. WHERE  
  6.   u.id NOT IN (SELECT g.uid FROM group_member g WHERE g.gid = 3)  
Így már oké, köszi.