gpt4 book ai didi

mysql - 在缩减表上获取加入 MySQL 中的所有结果

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

我的 3 个表:

帖子

enter image description here

标签:

enter image description here

post2tags:

enter image description here

所以在 posts 表中我没有引用任何与 tags 相关的内容。而在 tags 表中,没有对 posts 的引用。我创建了一个新表 posts2tags 并在其中引用了 tagsposts

问题:这是正确的做法吗?我是否需要在 tags 表中为 posts 提供任何引用,反之亦然?

我想要实现的是返回 posts 表中的所有内容以及 post 中的所有 tag names > 被 tags 引用(在 posts2tags 表中)并将所有标签 names 放在一个 array/single row 中在结果中。像这样:

enter image description here

尝试过:

SELECT p.idPost, p.title, t.name from posts as p, tags as t, post2tags
WHERE t.idTags=post2tags.idTags

结果:

enter image description here

我正在学习连接多个表并将表缩减为仅包含其中的必需信息。所以也在寻求这方面的建议。

最佳答案

是的,这是正确的存储方式ManyToMany relation 联结表 (post2tags) 将保存帖子和标签的引用以将它们关联起来。为了获得预期的结果,您可以使用 left join 来获取所有帖子,无论它们是否有标签

select p.idPost, p.title, t.name
from posts as p
left join post2tags pt on (p.idPost = pt.idPost)
left join tags t on (t.idTags = pt.idTags)
order by p.idPost

这将返回所有带有相关标签的帖子,每个帖子将多次返回为否。分配的标签,如

idPost  title  name
-------------------
1 test tag1
1 test tag2
2 test tag1
2 test tag2
3 test null

然后在应用程序代码中,您可以按照您想要的格式显示这些结果,方法是执行一些 if/else 逻辑以仅显示一次帖子并显示其标签。

另一种 hacky 方法是使用 group_concat返回逗号分隔的每组值列表的函数,如下所示,但它有一些字符长度限制。

select p.idPost, p.title, group_concat(t.name) as `name`
from posts as p
left join post2tags pt on (p.idPost = pt.idPost)
left join tags t on (t.idTags = pt.idTags)
group by p.idPost
order by p.idPost

这将根据您想要的 View 为您提供结果

idPost  title  name
-------------------
1 test tag1,tag2
2 test tag1,tag2
3 test null

关于mysql - 在缩减表上获取加入 MySQL 中的所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46405466/

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