0

私は次のテーブルを持っています:

Media:
- mediaid
- mediatitle


MediaTag:
- mediaid
- mediatag


Tag:
- tagid
- tagname

次のタグ:

Tag: (1) - Public
Tag: (2) - Premium
Tag: (3) - Restricted

タグ付きの次のメディア:

Media: (1) - Public
Media: (2) - Premium & Restricted
Media: (3) - Premium
Media: (4) - Restricted
Media: (5) - No tags

Public (1)ユーザーには、Restricted (3)タグのみを表示する権限があると想定します。ユーザーが明示的にアクセスできないタグの組み合わせがメディアにある場合、ユーザーはそのタグを表示できません。メディアにタグがない場合、それはまったく表示されません。Media 1したがって、この場合のユーザーはとのみを表示できMedia 4ます。

タグIDを持つ配列の形式でユーザー権限を持っていると仮定して、メディアを取得するためのMySQLクエリを作成することは可能(1,3)ですか?

4

1 に答える 1

2

JOIN3 つのテーブルにアクセスし、ユーザーがそれらにアクセスする権限を持っているタグ ID を含む配列を句のIN述語に渡します。WHERE

たとえば、配列[1, 3]の場合、これを行うことができます:

SELECT m.mediatitle, t.tagname
FROM media m
INNER JOIN MediaTag mt ON m.mediaid = mt.mediaid
INNER JOIN Tag t ON mt.mediatag = t.tagid
WHERE t.id IN (1, 3);

更新:mediatitleたとえば、両方のタグ ID (1、3) を持つのみを取得するには、次のようにaGROUP BY mediatitleを使用します。HAVING COUNT(tagname) = 2

SELECT m.mediatitle
FROM media m
INNER JOIN mediaTag mt ON m.mediaid = mt.mediaid
INNER JOIN tag t ON mt.mediatag = t.tagid
WHERE t.tagid IN (1, 3)
GROUP BY m.mediatitle
HAVING COUNT(t.tagname) = 2;

SQL フィドルのデモ

于 2012-11-06T15:10:12.473 に答える