PHP MySQL объединяет таблицу пользователей в несколько столбцов & amp; Ряды

У меня были некоторые проблемы с объединением таблиц в проекте, над которым я работаю, для проектов.

У меня есть 3 таблицы, одна для проектов, одна для клиентов и одна для пользователей. Я пытаюсь сохранить идентификатор клиентов и пользователей в таблице проектов и присоединить их при получении.

+----+--------------+
| 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, и это настолько, насколько я смог найти SO:

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

Заранее спасибо за любые ответы!

3

Решение

Вот обновленный запрос от скрипки:

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
2

Другие решения

Других решений пока нет …