0

私はmySQLの知識で壁にぶつかりました。

それをより明確に説明するために、ここに私のテーブル(タグのかなり標準的な設定)があります:

keywords
---
keyword_id (ai)
keyword

-

topics_keywords
---
t_k_id (ai)
topics_id
keyword_id

-

topics
---
topics_id
etc

ここで、keywordsテーブルに次のエントリがあるとします。

keyword_id || keyword
1 || baseball
2 || sports

また、topics_keywordsには次のエントリがあります。

t_k_id || topics_id || keyword_id
1 || 1 || 1 
2 || 1 || 2
3 || 2 || 1

だから多分あなたは私がやろうとしていることを見ることができます。

誰かが「野球」と入力した場合、関連するキーワードを共有するトピックの数をカウントしたいと思います。上記の例では、baseballsportsは両方ともの共有キーワードですtopics_id: 1

したがって、誰かが入力した場合、トピックを共有するbaseball名前の付いた他のトピックが1つあることを示すcount()を取得するにはどうすればよいですか?sportsbaseball

4

1 に答える 1

2

私があなたを正しく理解しているなら、あなたはこのような何かを実行することを検討したいかもしれません:

SQLフィドル:http ://sqlfiddle.com/#!2/9e6be/6

SELECT COUNT(*)                                                             
  FROM keywords
  JOIN topics_keywords
 USING (keyword_id)
 WHERE keyword != 'value'
   AND topics_id IN (
         SELECT topics_id
           FROM keywords 
           JOIN topics_keywords 
          USING (keyword_id)
          WHERE keyword = 'value' );

つまり、探しているキーワードがないが、探しているキーワードのtopics_idがあるtopics_keywordsの数を選択しているということです。

于 2012-09-25T16:43:47.697 に答える