У меня есть две таблицы, одна с названиями мест и одна с номерами телефонов, например. Но каждое место может иметь более одного номера телефона.
Когда я пытаюсь код ниже, он дублирует место, и я получаю:
Место 1 - Первый номер телефона
Место 1 - Второй номер телефона
И я хочу:
Место 1 - Первый номер телефона, второй номер телефона
Итак, мне нужно, чтобы столбец "число" был массивом с каждым числом, связанным с местом. Как видите, я не очень хорошо разбираюсь в SQL lol Большое спасибо.
Таблица 1 - Места:
| id | name | address . |
|:-----------|------------:|:------------:|
| 1 | Example| Example |
| 2 | Example| Example |
Таблица 2 - Телефоны:
| id | fgk_place | number |
|:-----------|------------:|:------------:|
| 1 | 1 | 9999999 |
| 2 | 1 | 8888888 |
Что я пытаюсь сделать:
SELECT places.id, name, phones.number
FROM places
LEFT JOIN phones ON phones.fgk_place = places.id
Что я получаю:
1, Example, 9999999
1, Example, 8888888
Что мне нужно:
1, Example, [9999999, 8888888]
большое спасибо
Если вы хотите, чтобы телефонные номера были в порядке, используйте опцию ORDER BY
в GROUP_CONCAT()
.
Кроме того, вы хотите установить разделитель на ', '
. По умолчанию используется значение ','
, поэтому вам нужна опция SEPARATOR
.
Предполагая, что порядок основан на столбце id:
SELECT pl.id, pl.name,
GROUP_CONCAT(ph.number ORDER BY ph.id SEPARATOR ', ') as numbers
FROM places pl LEFT JOIN
phones ph
ON ph.fgk_place = pl.id
GROUP BY pl.id, pl.name;
Использовать group_concat
SELECT places.id, name, GROUP_CONCAT(phones.number)
FROM places
LEFT JOIN phones ON phones.fgk_place = places.id
GROUP BY places.id, name