0
这只是我的标签系统中使用的表格设计的一个例子。多对多的关系,使查询更简单
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
但用于搜索标签查询是一个烂摊子,任何想法解决这个更轻松?
我想简单地显示按日期排序的文章。但是我想显示这篇文章的所有标签列表。 @edit我不知道我是否理解这个权利,但你的查询必须单独执行,有没有任何选项可以同时做到这一点? – boreq 2011-12-26 13:11:31