Mysql搜索查询返回包含任一搜索项的结果,而不是所有搜索项

p4tfgftt  于 2023-02-03  发布在  Mysql
关注(0)|答案(1)|浏览(185)

如果标题不清楚,我很抱歉,我将试着用一个例子来解释。假设我有一个标记为“trees”和“greenery”的文件,我想搜索它,但是当我在输入字段中输入“trees”和“greenery”时,它给我的结果是标记为其中之一或两者。
下面是我的数据库结构:

对于查询,我使用IN操作符,它看起来像这样:
SELECT path FROM tagged_files INNER JOIN file_tags ON tagged_files.tag_id=file_tags.id INNER JOIN files ON tagged_files.file_id = files.id WHERE file_tags.tag IN ($inQuery) GROUP BY files.id ORDER BY files.id;
变量$inQuery定义为:$inQuery = implode(',', array_fill(0, count($tags), '?'));$tags是来自搜索查询的字符串,我稍后绑定这些值。
如何让查询只选择与我输入的所有标记匹配的文件?

dgiusagp

dgiusagp1#

好了,我想我已经弄明白了,在查询的末尾添加HAVING COUNT(DISTINCT file_tags.id) = numberOfTags可以确保所有的词都被考虑在内。
这样做的原因是,如果您选择所有带有IN标签的文件(例如“trees”,“greenery”),如果有意义的话,您会得到每个文件带有这些标签的两行。

相关问题