尝试为用户构建针对组和子组的优化查询

时间:2013-06-04 08:57:46

标签: mysql

我正在尝试为三个方面编写查询。我的表结构就像那样

您可以在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的新手:(

1 个答案:

答案 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

请原谅任何未经测试的拼写错误(测试数据中没有子组)。