Прежде всего, я знаю, что заголовок моего вопроса немного сбивает с толку, поэтому позвольте мне попытаться объяснить.
У меня есть 3 таблицы, поэтому с этими таблицами я хочу выбрать все из компаний и присоединиться к company_branches, а затем присоединиться к городам.
Все с ТОЛЬКО ОДНЫМ SQL QUERY, и я хочу закончить со списком компаний, и каждая компания, имеющая его, разделяет (массив) в столбце, названном веткими.
Смотрите примеры ниже.
companies_table
id | name
--------+-----------------------
1 | microsoft
--------+-----------------------
2 | facebook
company_branches_table
id | company_id | city_id
--------+-----------------+-------------
1 | 1 | 3
--------+-----------------+-------------
2 | 1 | 2
--------+-----------------+-------------
3 | 2 | 1
cities
id | name
--------+-------------
1 | LA
--------+-------------
2 | New york
--------+-------------
3 | Chicago
Вот как я хотел, чтобы мои результаты были похожи
в JSON или ассоциативный массив
[
{
id : 1,
name : microsoft,
branches : [
{
id : 2,
city_name : New york
},
{
id : 3,
city_name : Chicago
}
]
},
{
id : 2,
name : facebook,
branches : [
{
id : 1,
city_name : LA
}
]
}
]
Я надеюсь, ты поймешь. заранее спасибо
Вы можете использовать group_concat()
SELECT c.NAME AS companyName,
Group_concat(ci.NAME) AS totalBranches
FROM companies_table c
INNER JOIN company_branches_table cb
ON cb.company_id = c.id
INNER JOIN cities ci
ON ci.id = cb.city_id
GROUP BY c.NAME
простой подход...
SELECT c.NAME AS companyName,
Group_concat(ci.NAME) AS totalBranches
FROM companies_table c
INNER JOIN company_branches_table cb
ON cb.company_id = c.id
INNER JOIN cities ci
ON ci.id = cb.city_id
GROUP BY c.NAME
оба запроса работают нормально, попробуйте в базе данных MySQL...
Может быть, это поможет
SELECT ct.id,ct.name,group_concat(c.id, '->', c.name) AS branches FROM companies_table AS ct JOIN company_branches_table AS cbt ON ct.id = cbt.company_id JOIN cities AS c ON c.id = cbt.city_id GROUP BY ct.id