MySQL выбирает «многие ко многим» и собственную таблицу - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть две таблицы, users (user_id, username, etc) и groups (group_id, group_name, group_parent, group_type), и они связаны многие-ко-многим с третьей таблицей group_user (group_id, user_id).

group_parent является внешним ключом самой таблицы групп. тип_группы enum ('security', 'department', etc)

У меня есть user_id, и мне нужна вся информация о пользователе, включая отдел (group_type), к которому принадлежит этот пользователь. Пока эта часть проста. Часть, которую я не могу понять, заключается в том, что мне также нужно получить для каждого отдела родителя, если таковой имеется.

Я потерял счет различным запросам, которые я пробовал. Это последний:

SELECT u.*, 
       IF (groups.group_type<>'department', NULL, groups.group_name) AS 
       department, 
       IF (groups.group_type<>'department', NULL, groups.group_id)   AS 
       department_id, 
       g.group_name                                                  AS 
       sub_department, 
       g.group_id                                                    AS 
       sub_department_id 
FROM   users u 
       LEFT JOIN group_user_relationships rel 
         ON rel.user_id = u.user_id 
       LEFT JOIN groups 
         ON rel.group_id = groups.group_id 
       LEFT JOIN groups g 
         ON g.group_id = groups.group_parent 
WHERE  user_id =$ user_id 
ORDER  BY department DESC 
LIMIT  0, 1 

РЕДАКТИРОВАТЬ: моя основная проблема заключается в том, что я не получаю результаты, если пользователь принадлежит к группе другого типа (кроме «отдела»), но не принадлежит ни к одному отделу. В этом случае он должен вернуть, u. * И ноль для всех других полей, но это не так.

...