SQL:MATCH反对数组中的所有元素



我有一个存储在cookie中的"标签"数组。它们被格式化为由,的s分隔的一系列单词。我试图返回表中的所有行,其中该数组的每个"标记"都位于"search_tags"列中。

我目前有:

$stmt = $conn->prepare("SELECT * FROM users WHERE MATCH search_tags AGAINST('". $_COOKIE['tags'] ."' IN BOOLEAN MODE);");

这几乎可以工作,但会返回ANY标记匹配的所有行。而不是要求所有$_COOKIE['tags']与"search_tags"列匹配。

另一种解决方案可以是,它作为OR查询,而是根据匹配数或相关性对结果进行排序。

您可以在布尔模式中使用+运算符来断言单词必须存在,因此,如果您将标记从逗号分隔的列表转换为+分隔的列表,则会得到您想要的结果:

$tags = '+' . implode(' +', explode(',', $_COOKIE['tags']));
$stmt = $conn->prepare("SELECT * FROM users WHERE MATCH search_tags AGAINST('$tags' IN BOOLEAN MODE);");

请注意,如果逗号后面可能有空格,则应使用preg_split('/,s*/', $_COOKIE['tags'])而不是explode

相关内容

  • 没有找到相关文章

最新更新