0

我在这里遇到了这个问题。我在表中有 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

但我想问你是否有其他方式——“更聪明”的方式?

谢谢!

4

2 回答 2

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)

如果您想要所有三个匹配的位置,则将 更改orand。(您的代码和您的描述似乎在您想要任何匹配还是全部匹配方面有所不同。)

于 2013-05-24T11:11:31.273 回答
2

你想达到什么目的?这些搜索查询或类似的东西吗?如果正在尝试搜索,您可以在 BOOLEAN MODE 中使用 MySQL 全文搜索

SELECT id FROM table WHERE kw1='".$kw1."' OR kw2 = '".$kw2."' OR kw3 = '".$kw3."'

即使只有 kw1 等于 $kw1,这个查询也会匹配,你应该使用 AND 语句来匹配它们三个。

于 2013-05-24T11:14:13.653 回答