在 MySQL/PHP 中使用关系数据库过滤信息时出现问题

Trouble filtering information with relational databases in MySQL/PHP

我正在处理我的第一个项目(项目管理系统)以更好地理解 PHP 和 MySQL。我目前在我的数据库中有 3 个 table,一个列出所有项目 ('projects' table),一个存储用户的用户名和密码 ('users' table) 然后是第三个小 'permissions' table,用于过滤用户可以从项目 table.

中看到的项目

第三个'permissions'table由一个唯一的id组成,然后在其他两列中有一个"user_id"和一个"project_id"。 "user_id" 引用"users" table 中用户的id,"project_id" 引用项目table 中的项目id。

请注意,不止一个用户可以访问一个项目,这就是为什么在项目 table 中不只有一个列,我读到过使用逗号分隔的列表多个用户名是一个糟糕的方法。因此,我在 "user_id" 和 "project_id" 上设置了外键,相应地引用了每个外键的 ID。

现在我不确定这是否是设置的好方法,但在我看来似乎没问题。

我真正想做的是检索某个用户有权访问的所有项目。所以有点像(但显然有效):

SELECT * FROM projects WHERE user_id = 3;

有更简单的方法吗?与 join 命令有关,但我永远做不对。

提前致谢!

编辑:

抱歉含糊不清,解释起来有点棘手。

本质上,我只是想要一种方法来过滤用户 table 中的 table 从项目 table 中显示的行(再次注意,不止一个用户可以访问一个项目,所以我可以在项目 table 中放一个 "user_id" 列,而完全省略第三个 table。

我的 table 很像:

项目:

|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 = 来自用户 table 的 id。 project_id = 来自项目的 id table.

然后在 HTML/PHP 我只想检索用户也可以访问的项目。

不幸的是,你的问题不是很清楚,但我假设你想要一个查询来查找特定用户有权访问的所有项目,你可以简单地连接具有 id 的表:

SELECT * from projects INNER JOIN permissions ON 
projects.id = permissions.project_id WHERE 
permissions.user_id = 3

假设您要查找的用户的 ID 为 3

假设你有

Users (Id, Name)
Projects (Id, Name)
Permissions (UserId, ProjectId)

并且您想要 "retrieve all the projects a certain user has access to",并且您将用户 ID 存储在变量 $userId 中,您可以使用如下简单的查询:

select * from Projects pr  
join Permissions pe on pr.Id = pe.ProjectId
    and pe.UserId = $userId

Google 了解有关 SQL 语法和连接的更多信息。这是一个 link 我刚刚发现它看起来是一个不错的起点:http://www.sitepoint.com/understanding-sql-joins-mysql-database/