Объединить содержимое нескольких строк в 3NF MySQL таблиц - PullRequest
1 голос
/ 14 января 2010

Послушно нормализовав все мои данные, я столкнулся с проблемой объединения строк 3NF в одну строку для вывода. До сих пор я делал это с серверным кодированием, но по разным причинам мне теперь нужно выбрать все строки, связанные с другой строкой, и объединить их в одну строку, все в MySQL ...

Итак, чтобы попытаться объяснить:

У меня есть три стола.

  • Категория
  • Статья
  • CategoryArticles_3NF

Категория содержит CategoryID + заголовки, описания и т. Д. Она может содержать любое количество статей в таблице Articles, состоящей из ArticleID + текстовое поле для размещения содержимого. Таблица CategoryArticles используется для связи между ними, поэтому содержит как CategoryID , так и ArticleID .

Теперь, если я выберу запись категории и присоединюсь к таблице статей через связывающую таблицу CategoryArticles_3NF, результатом будет отдельная строка для каждой статьи, содержащейся в этой категории. Проблема заключается в том, что я хочу вывести по одной строке для каждой категории, содержащей содержимое из всех статей внутри.

Если это звучит как нелепая просьба, значит, это так. Я просто использую статьи как хороший способ описать проблему. Мои данные на самом деле несколько отличаются.

В любом случае - единственный способ добиться этого - использовать оператор ' GROUP_CONCAT ', чтобы сгруппировать поля содержимого вместе. Проблема заключается в том, что существует ограничение на количество данных. может вернуться, и мне нужно, чтобы иметь возможность обрабатывать значительно больше.

Может кто-нибудь сказать мне, как это сделать?

Спасибо.

1 Ответ

2 голосов
/ 14 января 2010

Это звучит как то, что должно быть сделано в интерфейсе без дополнительной информации.

Если вам нужно, вы можете увеличить предел размера GROUP_CONCAT, установив системную переменную group_concat_max_len . Он имеет ограничение на max_allowed_packet , которое вы также можете увеличить. Я думаю, что максимальный размер пакета составляет 1 ГБ. Если вам нужно подняться выше, в вашем дизайне есть серьезные недостатки.

РЕДАКТИРОВАТЬ: так что это в ответе, а не просто похоронен в комментариях ...

Если вы не хотите изменять group_concat_max_len глобально, вы можете изменить его только для своего сеанса с помощью:

SET SESSION group_concat_max_len = <your value here>
...