我有以下表格:
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
。
是否可以编写MySQL查询来检索媒体,假设我拥有标记为(1,3)
的数组形式的用户权限?
答案 0 :(得分:2)
JOIN
三个表,并将包含用户有权访问它们的标记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);
更新:要仅获取同时包含标记ID(1,3)的mediatitle
,请使用GROUP 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;