多个标签搜索查询

Ode*_*Ode 8 mysql

我正在进行基于标签的搜索.我有三个表标签(id,name),tagXmedia(id,tag_id,media_id)和media(id,...).tagXmedia是标记和媒体表之间的映射表.这是一对多的关系.

我真的可以在如何创建"AND"类型的搜索方面使用一点方向.例如,我需要能够在媒体表中搜索与"home"和"hawaii"标签相关联的条目.

我已经尝试过MySQL等存在

SELECT
    tam.media_id
FROM
    tagXmedia tam
    LEFT JOIN tag ON tag.id = tam.tag_id
WHERE
    EXISTS (SELECT * FROM tag  WHERE tag.name = "home")
AND EXISTS (SELECT * FROM tag WHERE tag.name = "hawaii")
Run Code Online (Sandbox Code Playgroud)

对此有任何帮助真的很感激.

kba*_*kba 9

以下应该有效.

SELECT media_id
FROM tagXmedia
WHERE tag_id IN (SELECT id FROM tag WHERE name IN ('home','hawaii'))
GROUP BY media_id
HAVING COUNT(tag_id) = 2;
Run Code Online (Sandbox Code Playgroud)

如果您希望它不仅仅匹配两个标签,您可以轻松添加它们.只要记住改变2HAVING的条款.

我假设所有的行tagXmedia都是唯一的.如果不是,则必须添加DISTINCTCOUNT零件中.