我正在尝试为三个方面编写查询。我的表结构就像那样
您可以在http://sqlfiddle.com/#!2/56c2d/1
看到架构我正在尝试用MYSQL编写查询
user:- table
user_id
user_fname
这是用户选项卡,它将保存用户信息
group:- "group" and "subgroup" is maintain in same table using column "group_parent_group_id"
group_id
group_title
group_parent_group_id(INT)
这是将保存组和子组的组表
user_group: table
user_group_id
user_group_user_id
user_group_group_id
这会使用他们的ID存储用户和群组关系
我正在尝试为三件事编写查询。获取用户组,子组
1)查询以获取用户注册的所有组列表。查询是gelow并且正在给出错误
查询:
select user.id, user.user_fname, group.group_id, group.group_title
from `user`
inner join user_group on user_group.user_group_user_id = user.user_id
inner join group on group.group_id = user_group.user_group_group_id
where user_group.user_group_user_id = 1 and user_group.group_parent_group_id = 0
2)我正在查询查询以获取组ID 1,2或1的所有子组(对于谁用户已注册)
3)我正在查询查询以获取组ID 1,2或1的所有子组(对于谁用户尚未注册)。理想的是让他随机建议要添加的子组
请帮助。我是DB的新手:(
答案 0 :(得分:1)
您的查询可能会失败,因为您有一个名为group的表,这是一个保留字。您可以使用back tics来界定名称以便远离它(如下所示),但更改表名更好。
SELECT user.id, user.user_fname, `group`.group_id, `group`.group_title
FROM `user`
INNER JOIN user_group ON user_group.user_group_user_id = user.user_id
INNER JOIN `group` ON `group`.group_id = user_group.user_group_group_id
WHERE user_group.user_group_user_id = 1
AND user_group.group_parent_group_id = 0
针对我认为OP需要的查询更新了EDIT。
第一个查询将获得用户(在本例中为id 28)是
成员的所有组(没有父组ID)的列表SELECT y2m_user.user_id, y2m_user.user_first_name, y2m_group.group_id, y2m_group.group_title
FROM y2m_user
INNER JOIN y2m_user_group ON y2m_user_group.user_group_user_id = y2m_user.user_id
INNER JOIN y2m_group ON y2m_group.group_id = y2m_user_group.user_group_group_id
WHERE y2m_user.user_id = 28
AND y2m_group.group_parent_group_id = 0
此查询将获取用户(在本例中为id 28)是
成员的所有子组(父组ID大于0的子组)的列表SELECT y2m_user.user_id, y2m_user.user_first_name, y2m_group.group_id, y2m_group.group_title
FROM y2m_user
INNER JOIN y2m_user_group ON y2m_user_group.user_group_user_id = y2m_user.user_id
INNER JOIN y2m_group ON y2m_group.group_id = y2m_user_group.user_group_group_id
WHERE y2m_user.user_id = 28
AND y2m_group.group_parent_group_id > 0
此查询将获得所有子组(父组ID大于0的子组)的列表,用户(在本例中为id 28) NOT 是的成员
SELECT y2m_user.user_id, y2m_user.user_first_name, y2m_group.group_id, y2m_group.group_title
FROM y2m_user
CROSS JOIN y2m_group
LEFT OUTER JOIN y2m_user_group ON y2m_user_group.user_group_user_id = y2m_user.user_id AND y2m_group.group_id = y2m_user_group.user_group_group_id
WHERE y2m_user.user_id = 28
AND y2m_group.group_parent_group_id > 0
AND y2m_user_group.user_group_id IS NULL
请原谅任何未经测试的拼写错误(测试数据中没有子组)。