gpt4 book ai didi

mysql - 多对多关系,使查询不那么复杂

转载 作者:行者123 更新时间:2023-11-29 14:37:52 25 4
gpt4 key购买 nike

这只是我的标签系统中使用的表格设计的示例。

ARTICLES
id
content

TAGS
id
tag

TAGSTOARTICLES
articleid
tagid

@edit 最后经过一些 rubberducking我设法编写了以下查询:

<小时/>

仅选择文章:

SELECT a.id, a.content, GROUP_CONCAT(t.tag) AS tags
FROM articles a
LEFT JOIN tagstoarticles tta ON tta.articleid = a.id
LEFT JOIN tags t ON t.id = tta.tagid
GROUP BY a.id

结果:

id  content         GROUP_CONCAT(t.tag)
1 Lorem ipsum 1 tag1,tag2
2 Lorem ipsum 2 tag1
3 Lorem ipsum 3 tag2
<小时/>

搜索标签:

SELECT a.id, a.content, GROUP_CONCAT(t.tag) AS tags
FROM articles a
LEFT JOIN tagstoarticles tta ON tta.articleid = a.id
LEFT JOIN tags t ON t.id = tta.tagid
WHERE a.id IN (SELECT A.id FROM tagstoarticles M, articles A, tags T
WHERE M.tagid = T.id
AND (T.tag IN ('tag1'))
AND A.id = M.articleid
GROUP BY A.id
HAVING COUNT( A.id )=1
)
GROUP BY a.id

结果:

id  content         GROUP_CONCAT(t.tag)
1 Lorem ipsum 1 tag1,tag2
2 Lorem ipsum 2 tag1
<小时/>

但是用于搜索标签的查询很困惑,有什么办法可以更轻松地解决这个问题吗?

最佳答案

“但是如何修改此查询以同时选择分配给本文的所有标签?”

SELECT tag FROM tags INNER JOIN tagstoarticles ON tags.id = tagstoarticles.tagid WHERE articleid=[your article's id]

“当我只想获取结果而不按标签搜索时该怎么做?”

SELECT articles.id, tags.tag FROM articles INNER JOIN tagstoarticles ON tagstoarticles.articleid = articles.id INNER JOIN tags ON tagstoarticles.tagid = tags.id ORDER BY articles.id, articles.date

这为每个标签提供了一个不同的结果行,因此您必须应用一些后处理才能将其转换为带有标签的文章列表。但是,通过按文章 ID 排序,您可以确保一篇文章的所有标签都一起返回。

关于mysql - 多对多关系,使查询不那么复杂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8636003/

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