Mysql查询检查访问私有页面

时间:2012-02-28 13:29:56

标签: php mysql sql

将组表和成员组关系表视为

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

OR

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).

3 个答案:

答案 0 :(得分:1)

以下是检索用户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中的保留字。

答案 1 :(得分:1)

你应该试试这个......

SELECT g.*,gm.* FROM group g INNER JOIN group_map gm ON g.`group_id` = gm.`group_id`

答案 2 :(得分:0)

首先,如果我理解你想要什么,你就不需要第二个表。您可以使用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 //
相关问题