1

我正在尝试为三件事编写查询。我的表结构是这样的

您可以在http://sqlfiddle.com/#!2/56c2d/1看到 Schema

我正在尝试在 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 的所有子组(用户尚未注册)。理想的是给他随机建议一个要添加的子组

请帮忙。我是数据库的新手 :(

4

1 回答 1

1

您的查询可能失败,因为您有一个名为 group 的表,这是一个保留字。您可以使用 back tic 来分隔名称以摆脱这种情况(如下所示),但最好更改表名。

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

EDIT 更新了我认为 OP 需要的查询。

第一个查询将获取用户(在本例中为 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

此查询将获取用户(在本例中为 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

此查询将获取用户(在本例中为 28)不是其成员的所有子组(父组 id 大于 0 的子组)的列表

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

请原谅任何未测试的错别字(您的测试数据没有子组)。

于 2013-06-04T09:34:58.223 回答