gpt4 book ai didi

mysql - 将所有查询结果分组到一行中

转载 作者:行者123 更新时间:2023-11-29 03:04:32 25 4
gpt4 key购买 nike

例如,我有一个带有标签的简单博客。我有一个 Blog 表、一个 Tag 表和一个 TagRelation 表。我想运行一个查询并在其自己的一行中获取每篇博文的所有相关数据,包括标签。

SELECT Tag.id AS 'Tag.id', Tag.name AS 'Tag.name', Blog.id AS 'Blog.id', Blog.author AS 'Blog.author', Blog.title AS 'Blog.title', Blog.content AS 'Blog.content' 
FROM Blog
INNER JOIN TagRelation ON TagRelation.target = Blog.id
INNER JOIN Tag ON Tag.id = TagRelation.Tag
WHERE Blog.id = '101'

这个查询会为每个标签提供一行,每个标签都有相同的博文数据,帖子 ID 为 101,添加 GROUP BY Blog.id 只会给我一行,但无论如何是任意第一个 Tag 结果。

我想要的是这样的:

Blog.id | Blog.author | Blog.title | Blog.content | Tag.id | Tag.name | Tag.id | Tag.name 
-----------------------------------------------------------------------------------------
101 | someone | something | lolstuff | 1 | tag1 | 2 | tag2

这样我的客户端代码就可以轻松地将其解析为对象。这在 MySQL 中是否可行,而无需处理同一博客 ID 的多个匹配行或执行子查询只是为了获取每个帖子的标签? (实际的数据库当然比这更大更复杂,我想尽可能多地做连接。)

最佳答案

涉及使用 GROUP_CONCAT() 的接近解决方案:

SELECT
GROUP_CONCAT(Tag.id SEPARATOR ',') AS 'Tag.ids',
GROUP_CONCAT(Tag.name SEPARATOR ',') AS 'Tag.names',
Blog.id, Blog.author, Blog.title, Blog.content
FROM Blog
INNER JOIN TagRelation ON TagRelation.target = Blog.id
INNER JOIN Tag ON Tag.id = TagRelation.Tag
WHERE Blog.id = '101'
GROUP BY Blog.id

这导致相应的 Tag.id 的两个以逗号分隔的列表的和Tag.name在列中 Tag.idsTag.names分别。

但同样,在您的应用程序代码中迭代列(或本例中的逗号分隔值)而不是行真的更容易吗?

关于mysql - 将所有查询结果分组到一行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com