我正在尝试进行搜索并需要从查询中删除没有匹配项的单词。
让我们说有3个字:一个,两个和三个。如果找不到一个,那么我需要用其他两个单词重新运行查询(我得到empty_space
和two
和three
的结果,因此查询找不到任何内容。等等。但我不知道如何识别无法匹配的单词并再次使用其他两个单词运行查询。
编辑:如果我使用此代码,要使用$i++
计算数组中的元素,请查询 - one two three
:
if(!empty($d)) {
if($i < 2) {
$like_str .= " (title LIKE '%".$keyword."%')";
} else {
$like_str .= " AND (title LIKE '%".$keyword."%')";
}
}
结果:SELECT * FROM shop_products_ WHERE AND (title LIKE '%two%') AND (title LIKE '%three%')
使用现有的单词,查询 - one two
if(!empty($d)) {
if($key < 1) {
$like_str .= " (title LIKE '%".$keyword."%')";
} else {
$like_str .= " AND (title LIKE '%".$keyword."%')";
}
}
结果:SELECT * FROM shop_products_ WHERE (title LIKE '%one%') AND (title LIKE '%two%')
答案 0 :(得分:1)
只是不要AND
约束,OR
他们。任何不匹配的单词都不会干扰其他单词,如下所示:
WHERE w = 'one' OR w = 'two' OR w = 'three'
如果one
不存在,则与以下内容相同:
WHERE w = 'two' OR w = 'three'
无论如何,我建议 NOT 将您的SQL查询粘贴到PHP中的字符串之外,这非常受SQL注入和完全放弃和沮丧的做法的影响。您应该使用的是参数,具体取决于实际的实现(mysqli?PDO?),类似于:
WHERE w = ? OR w = ? OR w = ?
另一方面,如果您需要arity n ,则可能需要使用IN
子句:
WHERE w IN ('one', 'two', 'three')
但是由于技术限制,你不能在这里使用参数。更多相关信息:Binding parameters for WHERE IN clause with PDO
答案 1 :(得分:0)
尝试使用找到的单词创建数组,例如:
$a = array('two','three');
然后以“AND”内爆。
$matches = implode(" AND ", $a);