我正在尝试构建一个搜索功能,但当前的表结构让我感到困扰。
因此,每一行都标识一个带有音频 ID 的“标签”关联。
TABLE audio_tag_assoc 示例
我通过加入表 tag_association 来获取每个标签 ID 的名称。
TABLE tag_association 示例
因此,我需要获取与两个甚至三个标签名称匹配的所有音频 ID。
我尝试了以下内容,但您可能会说它不起作用。我稍后会在这些括号之间添加一个连接,以使用字符串更改 IN 的 ID。
SELECT *
FROM audio_tag_assoc a
JOIN tag_association b ON a.tag = b.id
WHERE a.audio = (SELECT *
FROM audio_tag_assoc
WHERE tag IN (2,3)
)
最初我尝试使用 b.name = 'Male' AND b.name = 'Film'
但当然,这不是 mysql WHERE 子句的工作方式。
答案 0 :(得分:0)
做:
SELECT
*
FROM
audio_tag_assoc
INNER JOIN
tag_association ON audio_tag_assoc.tag = tag_association.id
WHERE
audio_tag_assoc.id IN (SELECT
a.id
FROM audio_tag_assoc a
WHERE
a.tag IN (2,3)
GROUP BY
a.audio
HAVING COUNT(a.id) >= 2
);