首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于检查对个人主页的访问的Mysql查询

用于检查对个人主页的访问的Mysql查询
EN

Stack Overflow用户
提问于 2012-02-28 21:29:56
回答 3查看 155关注 0票数 1

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

代码语言:javascript
复制
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)
);

现在在群页面中,如果出现以下情况,我如何显示内容

代码语言:javascript
复制
1. Group is public

代码语言:javascript
复制
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).
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-28 21:58:14

下面是如何检索用户1可以访问的所有组的列表,以及组名称:

代码语言:javascript
复制
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

代码语言:javascript
复制
(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
EN

Stack Overflow用户

发布于 2012-02-28 23:01:50

你应该试试这个。

代码语言:javascript
复制
SELECT g.*,gm.* FROM group g INNER JOIN group_map gm ON g.`group_id` = gm.`group_id`
票数 1
EN

Stack Overflow用户

发布于 2012-02-28 21:41:17

首先,如果我没弄错你想要什么,你不需要2-nd表。可以使用Users表。

如果组是私有的,我就是这么做的

代码语言:javascript
复制
SELECT tblGroups.*, tblUsers.* 
FROM `tblGroups`, `tblUsers` 
WHERE tblGroups.id=tblUsers.group AND // here you put what you need to open //

否则组是公共的,就是这样

代码语言:javascript
复制
SELECT tblGroups.* 
FROM `tblGroups` 
WHERE // here you put what you need to open //
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9482791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档