Нужно с помощью одного SQL скрипта (MySQL 5!) выбрать из двух таблиц информацию так, чтобы в одном из столбцов были данные через запятую (в общем случае через разделитель), например:
| + |
| = |
|
Довольно простая задача, если бы не требовался всего один скрипт или если бы это был MS-SQL(T-SQL) например.
Недолгое гугление привело меня к простому решению.
Есть такая функция в MySQL начиная с 4.1 версии: GROUP_CONCAT(). Она преобразовывает данные полученные с помощью GROUP BY в строку с произвольными разделителями, да еще и имеет несколько полезных параметров, например сортировку.
В результате получаем такой небольшой скрипт:
SELECT ID, GROUP_CONCAT(Data SEPARATOR ', ') as 'Data'
FROM Table1
JOIN Table2 ON Table1.ID=Table2.ID
GROUP BY Table1.ID
UPD:
Обнаружилось позднее: GROUP_CONCAT имеет по умолчанию ограничение по длине 1024 символа. Для чего - не понятно. Если бы хотя бы 1024 записей, то данные не обрывались бы.
Лечится так:
Единожны выполнить следующий скрипт над базой, используя любую необходимую длину, как больше 1024, так и меньше.
SET @@global.group_concat_max_len=любое число;
Если сервер не позволяет устанавливать глобальное значение (такое бывает для shared серверов на хостингах), тогда в каждой сессии обращения к БД, перед использованием GROUP_CONCAT нужно выполнять это:
SET @@session.group_concat_max_len=любое число;