在mysql布尔匹配中,如果不存在运算符,则隐含OR。如果您想要AND,则需要为每个关键字添加+。
因此查询“word1 word2”等于“word1或word2”,“+ word1 + word2”等于“word1 AND word2”
我不希望用户在每个关键字前输入+,我的选择是什么?
建议选项1:my.conf中是否有东西我可以更改为设置默认值(我没有找到任何内容)
建议选项2:解析查询并手动为每个单词添加+。您可以分享任何简单的代码吗?
这个问题是如果用户添加“引号”或运算符(+ - *<>)等,它会破坏我的解析代码。
答案 0 :(得分:3)
我在我的网站上提出了第二条建议。
如果你只处理单词(不是带引号的字符串),在每个单词之前添加+的简单单行
$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);
答案 1 :(得分:0)
不确定你的意思,但这里有一个例子,说明如何在每个单词前添加+。
$s = "a string with several words in it";
$words = preg_split('/\s+/',$s,null,PREG_SPLIT_NO_EMPTY);
if (count($words)) {
$str = '+' . implode(' +',$words);
}
答案 2 :(得分:0)
在没有运算符的情况下,没有办法在布尔模式下更改全文匹配的行为,缺少编辑源代码。你必须以某种形式使用选项2(正如其他人所示)。如果搜索表达式来自用户,请注意如何操作。