У меня есть две таблицы, 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. * И ноль для всех других полей, но это не так.