#mysql #sql
SELECT q.*, a.answer FROM `questions` q LEFT JOIN ( SELECT question_id, GROUP_CONCAT(text SEPARATOR '|| ') answer FROM answers GROUP BY question_id ) a ON q.uid = a.question_id WHERE q.deleted = 0 GROUP BY q.uid Этот запрос выбирает вопросы и ответы к ним, склеивая их. В табличке ответы хранятся в виде text. При выборке и конкатенации часть текста обрезается. Например если у меня 3 больших ответа, мне возвращает где-то целый первый ответ и половину второго. Если в базе все эти ответы сделать маленькими - все отлично. В чем здесь проблема?
Ответы
Ответ 1
У функции GROUP_CONCAT есть ограничение на объем выводимых данных. По умолчанию 1024 символа для каждого объединения - для каждой выводимой строки. Если размер данных, полученных в результате конкатенации, больше, выводимый текст будет обрезан. Чтобы расширить размер, нужно выполнить команду: SET SESSION group_concat_max_len = 1000000; или SET @@group_concat_max_len = 1000000; (аналогична предыдущей). Но данная команда будет применена только к текущей сессии. По завершении сессии, например, при открытии нового соединения, значение данной переменной вернётся к начальному значению. Для установки глобальной переменной нужно выполнить следующую команду: SET GLOBAL group_concat_max_len = 1000000;
Комментариев нет:
Отправить комментарий