PHP MySQL 将用户表加入多列和多行

标签 php mysql inner-join concat self-join

我在加入我正在从事的项目中的表时遇到了一些问题。

我有 3 张表,一张用于项目,一张用于客户,一张用于用户。我正在尝试将 Customers 和 Users 的 ID 存储在 Projects 表中,并在检索时加入它们。

+----+--------------+
| ID | CustomerName |
+----+--------------+
|  1 | Customer 1   |
|  2 | Customer 2   |
|  3 | Customer 3   |
+----+--------------+

+----+-----------+----------+
| ID | FirstName | LastName |
+----+-----------+----------+
|  1 | Bob       | Belcher  |
|  2 | Stirling  | Archer   |
|  3 | Bart      | Simpson  |
|  4 | Peter     | Griffin  |
|  5 | BoJack    | Horseman |
|  6 | Eric      | Cartman  |
+----+-----------+----------+

+----+---------------+-----------------+-------------+-------------------+-------------------+--------------------+
| ID | ProjectNumber | ProjectCustomer | ProjectLead | ProjectElectrical | ProjectMechanical | ProjectDescription |
+----+---------------+-----------------+-------------+-------------------+-------------------+--------------------+
|  1 | 0001          |               1 |           3 |                 4 |                 6 | Project 1          |
|  2 | 0002          |               2 |           2 |                 5 |                 5 | Project 2          |
|  3 | 0003          |               3 |           1 |                 6 |                 4 | Project 3          |
+----+---------------+-----------------+-------------+-------------------+-------------------+--------------------+

我整天都在研究 Select,这是我能够搜索到的所有信息:

select Projects.ProjectNumber, Customers.CustomerName, CONCAT_WS(' ', Users.FirstName, Users.LastName) AS ProjectLead, Projects.ProjectElectrical, Projects.ProjectMechanical, Projects.ProjectDescription FROM Projects
INNER JOIN Customers ON Projects.ProjectCustomer = Customers.ID
LEFT JOIN Users ON Projects.ProjectLead = Users.ID

这让我走到了那里:

+---------------+--------------+-----------------+-------------------+-------------------+--------------------+
| ProjectNumber | CustomerName | ProjectLead     | ProjectElectrical | ProjectMechanical | ProjectDescription |
+---------------+--------------+-----------------+-------------------+-------------------+--------------------+
| 0001          | Customer 1   | Bart Simpson    |                 4 |                 6 | Project 1          |
| 0002          | Customer 2   | Stirling Archer |                 5 |                 5 | Project 2          |
| 0003          | Customer 3   | Bob Belcher     |                 6 |                 4 | Project 3          |
+---------------+--------------+-----------------+-------------------+-------------------+--------------------+

但就我的生活而言,我无法让 ProjectElectrical 和 ProjectMechanical 做与 ProjectLead 相同的事情。我要么得到 ProjectLead 的副本,要么得到 NULL。

谁能帮我指明正确的方向?我是否需要完全重新设计我的查询,或者我是否在正确的轨道上?

我在 SQL Fiddle 上弄过它

提前感谢所有回复!

最佳答案

这是来自 fiddle 的更新查询:

select Projects.ProjectNumber, Customers.CustomerName, CONCAT_WS(' ', Users.FirstName, Users.LastName) AS ProjectLead, CONCAT_WS(' ', u2.FirstName, u2.LastName) AS ProjectElectrical, CONCAT_WS(' ', u3.FirstName, u3.LastName) AS ProjectMechanical, Projects.ProjectDescription FROM Projects
INNER JOIN Customers ON Projects.ProjectCustomer = Customers.ID
LEFT JOIN Users ON Projects.ProjectLead = Users.ID
LEFT JOIN Users AS u2 ON Projects.ProjectElectrical = u2.ID
LEFT JOIN Users AS u3 ON Projects.ProjectMechanical = u3.ID

关于PHP MySQL 将用户表加入多列和多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26557960/

相关文章:

mysql - sql查询-如何根据时间避免 "virtually"重复记录

sql - 如何使用 Laravel eloquent 在数据透视表上执行额外的内部连接

sql - 通过一个查询从 3 个表中删除

PHP - 以参数作为参数传递函数

php - 使用 php 和 mysqli 填充下拉框

php - MYSQL : Getting error in TRIGGER

mysql - 我的数据库中的 Mysql 语法出现错误 1136

php - 如何在 Yii 数据库管理系统中更改数据库字符集

php - 无法从 php、mysql 显示 html 表位置

php - SELECT、SELECT COUNT 和交叉引用表是否可以仅由一个查询处理?