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 :)

SELECT
  users.id,
  out_users.id,
  group_member.gid AS group_id
FROM
  users AS out_users
LEFT JOIN
  (users
JOIN
  group_member
ON
  group_member.gid=3 AND group_member.uid=users.id)
ON
  users.id=out_users.id
WHERE
  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?
SELECT
  u.id
FROM
  users u
WHERE
  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

SELECT
  u.id
FROM
  users u
WHERE
  u.id NOT IN (SELECT g.uid FROM group_member g WHERE g.gid = 3)
Így már oké, köszi.