我正在开发我的第一个项目(项目管理系统),以更好地理解PHP和MySQL。我目前在我的数据库中有3个表,一个列出所有项目('项目'表),一个存储用户用户名和密码('用户'表),然后是第三个小'权限'表,用于表示过滤掉用户可以从项目表中看到的项目。
第三个'permissions'表包含一个唯一的id,然后是另外两列中的“user_id”和“project_id”。 “user_id”引用“users”表中的用户id,“project_id”引用项目表中项目的id。
请注意,多个用户可以访问单个项目,这就是为什么在projects表中不存在单个列的原因,并且我读到使用逗号分隔的列表来表示多个用户名是一种糟糕的方式去做吧。因此我在“user_id”和“project_id”上设置了外键,相应地引用了每个的id。
现在我不确定这是否是一个很好的设置方法,但在我看来似乎没问题。
我想要做的是检索某个用户有权访问的所有项目。所以有点像(但显然有效):
SELECT * FROM projects WHERE user_id = 3;
有更简单的方法吗?与join命令有关,但我永远无法做到。
提前致谢!
编辑:
对于含糊不清的道歉,解释起来有点棘手。
基本上我只想要一种方法来过滤users表中user_id从projects表中显示的行(再次注意多个用户可以访问项目,这样我就可以在项目中放入一个“user_id”列表并完全省略了第三个表格。
我的桌子非常像:
项目:
|id|project_title|project_notes|project_status|
|1 |A Project |Some Notes |Finished |
|2 |A 2nd Project|Some more... |In Progress |
用户:
|id|username|password|
|1 |johndoe |*********|
|2 |benhill |*********|
权限:
|id|user_id|project_id|
|1 |1 |2 |
|2 |2 |2 |
用户表中的user_id = id。 project_id =项目表中的id。
然后在HTML / PHP中我只想检索用户也可以访问的项目。
答案 0 :(得分:0)
不幸的是,您的问题并不是很清楚,但我认为您希望只有一个查询来查找特定用户可以访问的所有项目,您可以简单地使用id连接表:
SELECT * from projects INNER JOIN permissions ON
projects.id = permissions.project_id WHERE
permissions.user_id = 3
假设您要查找的用户的ID为3
答案 1 :(得分:0)
假设你有
Users (Id, Name)
Projects (Id, Name)
Permissions (UserId, ProjectId)
并且您希望"检索某个用户有权访问的所有项目",并且您将用户ID存储在变量$userId
中,您可以使用如下的简单查询:
select * from Projects pr
join Permissions pe on pr.Id = pe.ProjectId
and pe.UserId = $userId
谷歌有关SQL语法和连接的更多信息。这是我刚刚找到的一个链接,它似乎是一个很好的起点:http://www.sitepoint.com/understanding-sql-joins-mysql-database/