将组表和成员-组关系表视为
CREATE TABLE group (
group_id int(11) not null auto_increment,
title varchar(50),
status ENUM('private', 'public'),
PRIMARY KEY(group_id)
);
CREATE TABLE group_map (
group_map_id int(11) not null auto_increment,
group_id int(11) REFERENCES group(group_id),
user_id int(11) REFERENCES user(user_id),
PRIMARY KEY(group_map_id)
);现在在群页面中,如果出现以下情况,我如何显示内容
1. Group is public或
2. user is member of that group (user_id comes from $_SESSION login,
and we check if the current group_id && user_id exists in group_map table).发布于 2012-02-28 21:58:14
下面是如何检索用户1可以访问的所有组的列表,以及组名称:
SELECT g.group_id, g.name
FROM `group` g
LEFT JOIN group_map gm
ON gm.group_id = g.group_id
WHERE g.status = 'public'
OR gm.user_id = 1这里有一个替代方案,使用UNION。
(SELECT g.group_id, g.name
FROM `group` g
WHERE g.status = 'public')
UNION
(SELECT g.group_id, g.name
FROM `group` g
JOIN group_map gm
ON gm.group_id = g.group_id
WHERE gm.user_id = 1)他们两个的尺码都差不多了。
请注意group表名两边的反引号,因为GROUP是MySQL中的保留字。
发布于 2012-02-28 23:01:50
你应该试试这个。
SELECT g.*,gm.* FROM group g INNER JOIN group_map gm ON g.`group_id` = gm.`group_id`发布于 2012-02-28 21:41:17
首先,如果我没弄错你想要什么,你不需要2-nd表。可以使用Users表。
如果组是私有的,我就是这么做的
SELECT tblGroups.*, tblUsers.*
FROM `tblGroups`, `tblUsers`
WHERE tblGroups.id=tblUsers.group AND // here you put what you need to open //否则组是公共的,就是这样
SELECT tblGroups.*
FROM `tblGroups`
WHERE // here you put what you need to open //https://stackoverflow.com/questions/9482791
复制相似问题