2012-03-23 10 views
0

私は3つのテーブルを持っている:私は、MySQLとの良好なパフォーマンスのクエリを書くのですかタグ付き記事を取得するには?

articles(id int) 
tags(id int, name varchar(255)) 
articles_tags(article_id, tag_id) 

私はtag1tag2に属しているすべての記事を見つけたいですか、?または、テーブルを設計する良い方法はありますか?

現在、私はこれにSphinxを使用していますが、Sphinxはorder attributesカラムのalive update indexをサポートしていません。

答えて

2
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を取り除くことも考えられます。あなたは記事テーブルテーブルに参加するだけです:

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; 
+0

私の答えはうまくいきます。私はリレーショナル表を学ばなければなりません。 – nickw444

+0

@barsju、あなたの質問はサポートされていません記事が同時にtag1とtag2に属しているのを見つけてください! – Neo

+0

oh。私は私の悪いことを参照してください私の答えを編集させてください – barsju

関連する問題