Записи. Выборка списка значенй поля при запросе записи из связанной таблицы
11 лет назадЧасто необходимо узнать список меток у записи, или какое другое перечисление для информации, но городить отдельный запрос в базу данных не хочется, на помощь в этом случае приходит замечательная функция : GROUP_CONCAT
Как работает GROUP_CONCAT?
При указании этой функции в тексте запроса полей в выборке, БД, объединяет все записи удовлетворяющие условию, в текстовое поле. Пример:
SELECT t1.id, t1.text, GROUP_CONCAT(tag.text) as tags FROM t1 LEFT JOIN tag ON t1.id=tag.tid GROUP BY t1.id
Данный запрос выберет все записи из таблицы t1 и при этом собирёт все значения поля tag.text относящихся к ним записей из таблицы tag, объединённой через запятую. Довольно удобно, не находите.
Сама же функция имеет несколько расширенный вариант вызова:
GROUP_CONCAT(field_name SEPARATOR "::")
данный вызов объединит все значения поля field_name через два двоеточия, что позволит после иметь возможность разделить записи для обработки их на стороне клиентского приложения, но надо продумать такой разделитель, которые гарантированно не сможет появиться или который позволит выводить данные сразу пользователю, без обработки.
Стоит отметить, что если вам надо объединить много информации, то можно увеличить переменную group_concat_max_len, до нужного значения. Максимальная величина перменной ограничена целочисленным значением типа integer, что около 4 миллиардов на 32 битных системах.
SET group_concat_max_len = 100000;