php - 在mysql bool 匹配中强制使用 "implied AND"而不是 "implied OR"?

标签 php mysql

在 mysql bool 匹配中,如果不存在运算符,则隐含 OR。如果您想要 AND,则需要为每个关键字添加 +。

因此查询“word1 word2”等于“word1 OR word2”,“+word1 +word2”等于“word1 AND word2”

我不希望用户必须在每个关键字前输入 +,我有什么选择?

建议选项 1:my.conf 中是否有某些内容我可以更改以设置默认值(我没有找到任何内容)

建议选项 2:解析查询并手动向每个单词添加 +。您可以分享任何简单的代码吗?

问题是,如果用户添加“引号”或运算符(+-*<>)等,它会破坏我的解析代码。

最佳答案

我在我的网站上提出了第二个建议。

如果您只处理单词(不处理带引号的字符串),则在每个单词之前添加 + 是一个简单的衬里

$q = implode(' ', array_map(create_function('$a', 'return "+".$a;'), preg_split('`\\s+`', $q))))

或者更简单的正则表达式替换做同样的事情:

echo preg_replace('`(\\W|^)\\w`', '\\1+\\2', $q);

如果您不仅要搜索单个单词,还需要搜索带引号的短语,则应在每个未带引号的单词和每个带引号的字符串之前添加 +

echo preg_replace('`(\\s|^)(\\w|"[^"]+")`', '\\1+\\2', $q);

关于php - 在mysql bool 匹配中强制使用 "implied AND"而不是 "implied OR"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1807414/

相关文章:

mysql - 按类别计算 MySQL 中具有最高值的结果

php - 计算前后测试的改进百分比(MYSQL 和 PHP)

php - SQL/PHP 顺序 ID 号

php - 分解为数组并将每个元素打印为列表项

php - 我应该将更新的计数作为用户表的一部分吗?

mysql - 创建 MySQL View 问题

php - 根据mysql中<br>展开列的值检索数据

php - 在 php 循环中包含 javascript 函数

php - $_POST 接收要更新的动态字段数量

mysql - 分组依据 - 返回零计数