Записи. Выборка списка значенй поля при запросе записи из связанной таблицы 

6 лет назад

Часто необходимо узнать список меток у записи, или какое другое перечисление для информации, но городить отдельный запрос в базу данных не хочется, на помощь в этом случае приходит замечательная функция : 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;

Авторизация



Поиск на сайте или перейди на страницу поиска