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

所以尝试解释一下:

我有三张桌子。

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

一个类别包含 类别ID + 标题、描述等它可以包含文章表中任意数量的文章,包括 文章ID + 用于容纳内容的文本字段。这 分类文章 表用于链接两者,因此包含 类别ID文章ID.

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

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

无论如何 - 我能看到实现这一目标的唯一方法是使用 '组连接' 语句将内容字段分组在一起 - 问题是它可以返回的数据量是有限的,我需要它能够处理更多的数据。

谁能告诉我该怎么做?

谢谢。

有帮助吗?

解决方案

这听起来像是应该在前端完成的事情,而无需更多信息。

如果需要,可以通过设置系统变量来增加 GROUP_CONCAT 的大小限制 组连接最大长度. 。它有一个限制基于 最大允许数据包, ,您也可以增加。我认为数据包的最大大小是 1GB。如果您需要比这个更高,那么您的设计中存在一些严重的缺陷。

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

如果您不想更改 组连接最大长度 在全局范围内,您可以仅针对您的会话更改它:

SET SESSION group_concat_max_len = <your value here>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top