mysql从3行中选择关键字

时间:2013-05-24 11:07:43

标签: php mysql

我有这个问题就在这里.. 我在表中有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

但我想问你是否还有其他方式 - “更聪明”吗?

谢谢!

2 个答案:

答案 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语句,你希望它们中的三个匹配。