У меня есть эта проблема:
У меня есть две таблицы: одна с данными пользователя и одна с почтовыми индексами, назначенными пользователю (один пользователь может иметь несколько почтовых индексов).
Таблица с почтовыми индексами имеет два столбца - начало и конец. Сначала мне нужно выбрать START и END и разделить их, например. с -. Я знаю, что могу использовать CONCAT_WS для этого, но мне также нужно взять эти сцепленные строки (есть несколько строк) и объединить их в одну строку.
У меня уже есть этот запрос:
SELECT pc.user_id, CONCAT_WS('-', pc.start, pc.end) FROM postal_codes pc, users u WHERE u.id=pc.user_id
Но вы ожидаете, что это даст мне такие результаты: (извините, я не знаю, как вставить сюда таблицы)
row | user_id | postal range
============================
1 | 1 | AAAA-BBBB
----------------------------
2 | 1 | CCCC-DDDD
----------------------------
3 | 1 | MMMM-NNNN
----------------------------
4 | 2 | CCCC-DDDD
----------------------------
5 | 2 | EEEE-FFFF
----------------------------
и мне нужно, чтобы это было так:
row | user_ID | postal_range
----------------------------
1 | 1 | AAAA-BBBB, CCCC-DDDD, MMMM-NNNN
----------------------------
2 | 2 | CCCC-DDDD, EEEE-FFFF
----------------------------
Я знаю, что могу использовать GROUP_CONCAT, если я хочу объединить несколько строк - но если я перенесу результат предыдущего запроса в GROUP_CONCAT следующим образом:
SELECT pc.user_id, (GROUP_CONCAT((SELECT CONCAT_WS('-', pc.start, pc.end) FROM bs_postal_codes pc, bs_users u WHERE u.id=pc.user_id) SEPARATOR ', ')) FROM bs_postal_codes pc
Это дает мне ошибку: подзапрос возвращает более 1 строки
Мне бы очень помогло, если бы кто-нибудь помог мне с этим, спасибо.