私は3つのテーブル: 'videos'、 'tags'、 'links'を持っています。ここでは、リンクテーブルの例である:MYSQLを使用してIDのリストで検索する
mysql> select * from links;
+----+-------+---------+
| id | tagid | videoid |
+----+-------+---------+
| 25 | 6 | 35 |
| 24 | 5 | 7 |
| 23 | 1 | 7 |
| 22 | 7 | 3 |
| 21 | 1 | 3 |
+----+-------+---------+
5 rows in set (0.00 sec)
私はこのクエリを使用し、各ビデオのタグリストを取得するには:
SELECT v.id, GROUP_CONCAT(l.tagid) as tags FROM videos v LEFT JOIN links l ON l.videoid = v.id GROUP BY v.id;
+----+------+
| id | tags |
+----+------+
| 30 | NULL |
| 31 | 2 |
| 32 | 1,3 |
| 33 | 1 |
| 34 | 1,2 |
+----+------+
5 rows in set (0.02 sec)
しかし、どのように、私はタグのリストを含む、動画を検索することができますか?現在私はクエリの最後にHAVING
句を追加します。
たとえば、タグ「1」、「1,4」、「1,4,7」の3つの動画があります。タグ1と4を含む動画を検索するには、HAVING sum(tagid = 1) > 0 AND sum(tagid = 4) > 0
を追加します。最後の2つの動画が返されます。これは同様の質問からの解決策です。 WHERE
句を使用するほうが便利なので、私はWHERE
で答えを探しています。
両方のタグ(1と4)を持つ動画が必要ですか? –
@PaulSpiegel、はい、複数のタグを検索したい – h0rn3t