0
我有三個表:如何獲得標籤文章?
articles(id int)
tags(id int, name varchar(255))
articles_tags(article_id, tag_id)
我想找到屬於tag1
和tag2
所有文章,我怎樣書寫與MySQL有着不錯的表現查詢?或者是否有設計表格的好方法?
現在,我爲此使用了Sphinx,但Sphinx不支持訂單屬性列的更新索引。
我有三個表:如何獲得標籤文章?
articles(id int)
tags(id int, name varchar(255))
articles_tags(article_id, tag_id)
我想找到屬於tag1
和tag2
所有文章,我怎樣書寫與MySQL有着不錯的表現查詢?或者是否有設計表格的好方法?
現在,我爲此使用了Sphinx,但Sphinx不支持訂單屬性列的更新索引。
SELECT a.* FROM articles a
INNER JOIN articles_tags at ON a.id=at.article_id
INNER JOIN tags t ON t.id=at.tag_id
WHERE t.name IN ('tag1', 'tag2)
GROUP BY a.id
HAVING count(a.id) >= 2;
而且您應該在您的標籤名稱上添加並編制索引。
此外,您可以考慮使用標籤名稱作爲標籤表的主鍵,擺脫標籤ID。這樣你只需要加入article_tags表:
SELECT a.* FROM articles a
INNER JOIN articles_tags at ON a.id=at.article_id
WHERE at.tag_name IN ('tag1', 'tag2)
GROUP BY a.id
HAVING count(a.id) >= 2;
好吧,我的答案跳動。我必須學習關係表。 – nickw444 2012-03-23 09:33:31
@barsju,您的查詢不支持查找同時屬於tag1和tag2的文章! – Neo 2012-03-23 09:33:39
哦。我看到我的不好..讓我編輯我的答案 – barsju 2012-03-23 09:35:56