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

Mysql 多对多关系,使查询不那么复杂,mysql,many-to-many,Mysql,Many To Many,这只是我的标签系统中使用的表格设计的一个示例 ARTICLES id content TAGS id tag TAGSTOARTICLES articleid tagid @edit经过一番努力,我终于写下了以下查询: 仅选择文章: SELECT a.id, a.content, GROUP_CONCAT(t.tag) AS tags FROM articles a LEFT JOIN tagstoarticles tta ON tta.articleid = a.id LEFT JOI

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

ARTICLES
id
content

TAGS
id
tag

TAGSTOARTICLES
articleid
tagid
@edit经过一番努力,我终于写下了以下查询:


仅选择文章:

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
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
3   Lorem ipsum 3   tag2
id  content         GROUP_CONCAT(t.tag)
1   Lorem ipsum 1   tag1,tag2
2   Lorem ipsum 2   tag1

搜索标签:

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
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
3   Lorem ipsum 3   tag2
id  content         GROUP_CONCAT(t.tag)
1   Lorem ipsum 1   tag1,tag2
2   Lorem ipsum 2   tag1

但是用于搜索标记的查询很混乱,有没有办法更容易地解决这个问题?

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

“当我只想得到结果而不需要按标签搜索时,如何做到这一点?”


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

我只想显示按日期订购的商品。但是我想显示本文中所有标签的列表@编辑我不知道我是否理解这一点,但您的查询必须单独执行,是否有任何选项可以同时执行?