1

2番目のテーブルのタグ情報で画像テーブルをフィルタリングする方法を理解するのに問題があります。

だから私はすべての基本的なフィールドを持つ画像テーブルを持っています:

id |
title |
userid |
timestamp |
status

そして私はタグテーブルを持っています:

id |
imageid |
text (contains a single tag)

私がやりたいのは簡単です。タグのリストを取得し、リストにすべてのタグが含まれている画像のリストを取得します。頭を包むことができません。

どんな助けでも大歓迎です、ありがとう!

4

2 に答える 2

2
SELECT 
    a.*
FROM 
    images a
INNER JOIN
    tags b ON a.id = b.imageid
WHERE
    b.text IN ('tag1', 'tag2', 'tag3')
GROUP BY
    a.id
HAVING
    COUNT(*) = 3

'tag1', 'tag2', 'tag3'は、入力タグのリストです。句の3中のは、タグ リスト内のタグ数の入力です。HAVING

于 2012-06-12T00:37:23.630 に答える
0

ごとに重複するタグがないと仮定するとimageid、id ごとにタグをカウントするクエリに結合して、IN()句を含むタグを検索するリストに制限できます。

次に、HAVING句を使用して、カウントがリスト内のタグの数と等しくないアイテム (完全なリストよりも少ないもの) を拒否します。

SELECT 
 images.*
FROM 
  images 
  JOIN (
    SELECT
     imageid,
     COUNT(*) AS numtags
     /* could also be COUNT(DISTINCT text) */
    FROM tags
    /* Put only the tags you want into an IN() clause */
    WHERE text IN ('tag1,'tag2','tag3')
    GROUP BY imageid
    /* If an image has all 3 tags, COUNT(*) = 3 */
    HAVING numtags = 3
  ) tlist ON images.id = tlist.imageid
于 2012-06-12T00:22:14.207 に答える