MySQL-запрос, соединяющий три таблицы

У меня три таблицы: проекты, списки, элементы.

Проект присоединяется к спискам на project_id , и элементы соединяются с списками в list_id , и цель состоит в том, чтобы иметь все данные строки для каждого.

Что я пробовал? Ну, на самом деле я смог сделать это только тремя отдельными запросами / выводами, а затем просто перебирал через них PHP для объединения данных.

Возможно ли написать запрос таким образом, что я получаю один объект данных, который я могу легко прокрутить?

 project (w details) -- list (and its details) ----- item (w details) ----- item (w details) ----- item (w details) -- list (w details) ----- item (w details) ----- item (w details) 

Вы имеете в виду вот так:

 select a.project_id, b.list_id, c.item_id from projects a join lists b on a.project_id=b.project_id join items c on b.list_id=c.list_id 

Результат будет примерно таким:

 project_id | list_id | item_id 1 | 5 | 45 1 | 5 | 46 1 | 8 | 12 

Или вы хотите вернуть все его части за один ряд?

Если вам нужна одна строка, вы можете сделать что-то вроде:

 select a.project_id, group_concat(b.list_id) as listIDs, group_concat(c.item_id) as itemIDs from projects a join lists b on a.project_id=b.project_id join items c on b.list_id=c.list_id 

Но он будет беспорядочным в PHP, чтобы иметь дело со всеми сгруппированными вещами.

Результат будет примерно таким:

 project_id | list_id | item_id 1 | 5,8 | 45, 46, 12 

Вы также можете смешивать и сопоставлять два, чтобы получить лучшее из обоих миров:

 select a.project_id, b.list_id as listIDs, group_concat(c.item_id) as itemIDs from projects a join lists b on a.project_id=b.project_id join items c on b.list_id=c.list_id 

Результат будет примерно таким:

 project_id | list_id | item_id 1 | 5 | 45, 46 1 | 8 | 12 

Попробуйте: Если вы хотите отобразить способ проецирования

 select a.project_id, b.list_id, c.item_id from projects a left join lists b on a.project_id=b.project_id left join items c on b.list_id=c.list_id order by b,c