我有这个问题就在这里.. 我在表中有3 + id行,其中3行用于关键字:
kw1, kw2, kw3
然后我有值
$kw1, $kw2, $kw3
所以表格看起来像
id | kw1 | kw2 | kw3 |
----------------------
1 | $kw1| $kw2| $kw3|
....
通过此查询,我只能选择所有3个匹配
SELECT id FROM table WHERE kw1='".$kw1."' OR kw2 = '".$kw2."' OR kw3 = '".$kw3."'
我也尝试过这样的事情:
SELECT id FROM table WHERE
(kw1='".$kw1."' OR kw2 = '".$kw2."' OR kw3 = '".$kw3."') OR
(kw1='".$kw3."' OR kw2 = '".$kw2."' OR kw3 = '".$kw1."') OR
(kw1='".$kw2."' OR kw3 = '".$kw2."' OR kw3 = '".$kw1."') OR
... ETC
但我想问你是否还有其他方式 - “更聪明”吗?
谢谢!
答案 0 :(得分:3)
您可以使用in
:
SELECT id
FROM table
WHERE kw1 in ($kw1, $kw2, $kw3) or
kw2 in ($kw1, $kw2, $kw3) or
kw3 in ($kw1, $kw2, $kw3)
顺便说一句,您可以在in
列表中添加列以及常量:
SELECT id
FROM table
WHERE $kw1 in (kw1, kw2, kw3) or
$kw2 in (kw1, kw2, kw3) or
$kw3 in (kw1, kw2, kw3)
如果您想要所有三个匹配的位置,请将or
更改为and
。 (您的代码和描述似乎在于您是否希望任何匹配或所有匹配。)
答案 1 :(得分:2)
你想要达到什么目的?这些搜索查询是类似的吗?如果您正在尝试搜索,则可以使用MySQL full text search in BOOLEAN MODE。
SELECT id FROM table WHERE kw1='".$kw1."' OR kw2 = '".$kw2."' OR kw3 = '".$kw3."'
即使只有kw1等于$ kw1,此查询也会匹配,你应该使用AND语句,你希望它们中的三个匹配。