我有两个表users (user_id, username, etc)
和groups (group_id, group_name, group_parent, group_type)
,它们与第三个表group_user (group_id, user_id)
有多对多关系。
group_parent是groups表本身的外键。 group_type是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。*和null用于所有其他字段,但事实并非如此。