【发布时间】:2022-07-25 18:22:51
【问题描述】:
我正在尝试为我正在使用 PHP 开发的小型项目管理 CMS 进行 MySQL 查询。我有四张桌子;项目、项目信息、项目用户和帐户。我可以使用 JOIN 获取所有用户的所有项目列表,以及他们最近的项目名称和描述。但是,我想查看特定用户参与的所有项目(来自表 projectUsers)。每个项目在项目表中都有一个 creatorId,我可以通过在下面的查询末尾添加“AND a.creatorId = 1”来查询它。但是,如果用户的外键存在于 projectUsers 表中,我还需要另一个查询来显示所有相同的项目信息。
查询显示所有项目的相关信息:
SELECT p.projectId, p.projectInfoId, p.userId, a.creatorId, p.updatedTimestamp, p.projectName, a.timestamp, a.projectType, accounts.firstname, accounts.lastname
FROM projects AS a
JOIN projectInfo AS p ON p.projectInfoId = ( SELECT pi.projectInfoId FROM projectInfo AS pi WHERE pi.projectId = a.id ORDER BY pi.updatedTimestamp DESC LIMIT 1 )
INNER JOIN accounts ON a.creatorId=accounts.id
WHERE a.deleted = 0
给我以下结果:
| projectId | userId | creatorId | updateTimestamp | projectName | timestamp | projectType | firstname | lastname |
| --------- | ------ | --------- | ------------------- | ------------------------ | ------------------- | ----------- | --------- | ---------|
| 155 | 1 | 1 | 2022-07-25 10:10:28 | Chicken Nugget Dispenser | 2022-07-25 10:04:01 | Production | Ryan | Admin |
| 156 | 1 | 1 | 2022-07-25 10:05:44 | Nugget Juice Dispenser | 2022-07-25 10:05:44 | Design | Ryan | Admin |
项目表
| id | timestamp | projectType | creatorId | deleted |
| -------- | ------------------- | ----------- | --------- | ------- |
| 155 | 2022-07-25 10:04:01 | Production | 1 | 0 |
| 156 | 2022-07-25 10:05:44 | Design | 1 | 0 |
项目信息表
| projectInfoId | projectId | userId | updatedTimestamp | projectName | projectDescription |
| ------------- | --------- | ------ | ------------------- | ------------------------ | ------------------------------------------ |
| 172 | 155 | 1 | 2022-07-25 10:10:28 | Chicken Nugget Dispenser | Dispenses chicken nuggets, idk... Update 2 |
| 171 | 155 | 1 | 2022-07-25 10:10:24 | Chicken Nugget Dispenser | Dispenses chicken nuggets, idk... Update 1 |
| 170 | 156 | 1 | 2022-07-25 10:05:44 | Nugget Juice Dispenser | Dispenses chicken nugget juice. |
| 169 | 155 | 1 | 2022-07-25 10:04:01 | Chicken Nugget Dispenser | Dispenses chicken nuggets, idk... |
帐户表
| id | username | password | email | role | firstname | lastname |
| -- | -------- | -------- | ----- | ------- | --------- | -------- |
| 1 | admin | ******** | ***** | Admin | Ryan | Admin |
| 35 | manager | ******** | ***** | Manager | Ryan | Manager |
| 36 | user | ******** | ***** | User | Ryan | User |
项目用户表
| id | addedTimestamp | projectId | userId | addedBy |
| --- | ------------------- | -------- | ------ | ------- |
| 213 | 2022-07-25 10:04:01 | 155 | 35 | 1 |
| 214 | 2022-07-25 10:04:01 | 155 | 36 | 1 |
我试图通过添加“INNER JOIN projectUsers ON 1=projectUsers.userId”来解决这个问题,但最终没有结果。我还尝试过对 projectUsers 进行子查询,以及在 IF EXISTS 上进行了几次尝试,但均无济于事。最终,我的 PHP 脚本将使用 $_SESSION 变量将外键“1”替换为数据库中的 userId,因此用户可以查看从 projectUsers 表中分配给他们的所有项目。
任何帮助将不胜感激!
谢谢, 瑞恩。
【问题讨论】:
-
嗯,我在你的表中看不到任何权限