1

在尽职尽责地规范化了我的所有数据后,我在将 3NF 行组合成单行以进行输出时遇到了问题。到目前为止,我一直在使用服务器端编码进行此操作,但由于各种原因,我现在需要选择与另一行相关的所有行,并将它们组合成一行,全部在 MySQL 中......

所以试着解释一下:

我有三张桌子。

  • 类别
  • 文章
  • 分类文章_3NF

类别包含CategoryID + 标题、描述等。它可以包含 Articles 表中的任意数量的文章,由ArticleID + 用于容纳内容的文本字段组成。CategoryArticles表用于链接两者,因此同时包含CategoryIDArticleID

现在,如果我选择一个类别记录,并通过链接 CategoryArticles_3NF 表加入文章表,则结果是该类别中包含的每篇文章的单独行。问题是我想为每个类别输出一行,其中包含所有文章的内容。

如果这听起来像一个荒谬的要求,那是因为它是。我只是使用文章作为描述问题的好方法。我的数据实际上有些不同。

无论如何 - 我能看到实现这一点的唯一方法是使用“ GROUP_CONCAT ”语句将内容字段组合在一起 - 问题是它可以返回多少数据是有限的,我需要它能够处理更多。

谁能告诉我该怎么做?

谢谢。

4

1 回答 1

2

这听起来像是应该在没有更多信息的情况下在前端完成的事情。

如果需要,可以通过设置系统变量group_concat_max_len来增加 GROUP_CONCAT 的大小限制。它有一个基于max_allowed_pa​​cket的限制,您也可以增加该限制。我认为一个数据包的最大大小是 1GB。如果您需要比这更高,那么您的设计中有一些严重的缺陷。

编辑:所以这在答案中,而不仅仅是隐藏在评论中......

如果您不想全局更改group_concat_max_len,那么您可以只为您的会话更改它:

SET SESSION group_concat_max_len = <your value here>
于 2010-01-14T03:12:51.467 回答