gpt4 book ai didi

mysql - 连接行的最有效方法

转载 作者:行者123 更新时间:2023-11-29 12:39:29 24 4
gpt4 key购买 nike

我的 SQL 知识确实有点生疏,但我有一个稍微简单的问题要问专家。我有三张 table :

帖子 - 帖子 ID - 姓名 - 描述

帖子类别 - 帖子 ID - 蛞蝓

帖子主题 - 帖子 ID - 蛞蝓

基本上我想查询像这样的帖子列表:

SELECT post_id, name, description, themes, categories FROM posts LIMIT 0, 50

我想组合相关类别和主题表并将它们连接到单个列中。所以我的输出是:

1 |测试|描述 |音乐、艺术、历史|重要、相关、新

我尝试将其作为子查询,但遇到了返回多行的常见问题。我也尝试过 LEFT JOIN'ing 结果,但我似乎无法返回正确的结果。由于担心在没有意识到的情况下干扰我的结果,我希望有人可以帮助制定最有效和最正确的查询。

谢谢。

最佳答案

从主表(帖子)开始,您可以与主题表和类别表进行常规连接。在这种情况下,使用左联接是为了允许没有类别或主题的行显示在结果中。

要获取逗号分隔值,请按 posts 中的值(每行应该有一个值的值)进行分组并使用 GROUP_CONCAT()以逗号分隔非分组值,例如;

SELECT p.post_id, p.name, p.description,
COALESCE(GROUP_CONCAT(pc.slug), '') categories,
COALESCE(GROUP_CONCAT(pt.slug), '') themes
FROM posts p
LEFT JOIN posts_categories pc ON p.post_id = pc.post_id
LEFT JOIN posts_themes pt ON p.post_id = pt.post_id
GROUP BY p.post_id, p.name, p.description
ORDER BY p.post_id, p.name, p.description
LIMIT 50

An SQLfiddle to test with .

关于mysql - 连接行的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26316428/

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