Присоединитесь к таблице с несколькими результатами, затем объединитесь в один столбец - PullRequest
0 голосов
/ 19 февраля 2019

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

У меня есть 3 таблицы,

  1. Компании
  2. company_branches
  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
                  }   

                ]
   }

]

Надеюсь, ты поймешь.заранее спасибо


[Редактировать]


Перечисленные таблицы вверху

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

вы можете использовать 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, 
       ci.NAME 
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

оба запроса работают правильно, опробовано в базе данных MySQL ...

0 голосов
/ 19 февраля 2019

Может быть, это поможет

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...