Mysql AND在多行上搜索多个关键字

时间:2012-09-17 14:46:38

标签: mysql sql search sql-like

假设我有这张表:

id    |  field1  |  field2  |  field3  |  field4
 0    |  pear    |  peach   |  fruit   |  california
 1    |  apple   |  peas    |  xxxxxx  |  cupertino
 2    |  apple   |  peach   |  xxxxxx  |  san francisco

如果用户搜索“apple peach”,我想获得该行

2    |  apple   |  peach   |  xxxxxx  |  san francisco

预期搜索“applepie san francisco”或“applepeach fran”的结果相同

那么mysql请求会做什么?

感谢

4 个答案:

答案 0 :(得分:4)

SELECT 
   * 
FROM 
   your_table
WHERE 
   'apple' IN (field1, field2, field3) 
   AND 'peach' IN (field1, field2, field3)

答案 1 :(得分:1)

很简单,您想检查field1是否为“apple”而field2是“桃子”,因此WHERE field1='apple' AND field2='peach'会这样做。

我觉得你想要的东西虽然有点复杂。一种解决方案可能是用逗号替换搜索词中的空格,然后使用IN SQL运算符在其中进行搜索。

因此以下内容可能有效:

SELECT ... FROM ... 
WHERE 
field1 IN ('apple','peach') OR 
field2 IN ('apple','peach') OR 
field3 IN ('apple','peach') OR  
field4 IN ('apple','peach')

答案 2 :(得分:1)

您将使用某种参数来适合您的搜索。所以:

SELECT `id`, `field1`, `field2`, `field3`, `field4`
  FROM Table1
 WHERE whatyouarelookingfor_1 IN (field1, field2, field3) 
   AND whatyouarelookingfor_2 IN (field1, field2, field3)

编辑添加IN子句,因为之前它只从一个字段中选择

这是一个简单的查询,请查看此工作 SQL Fiddle code

答案 3 :(得分:1)

尝试此查询

SELECT * FROM TABLE_NAME WHERE CONCAT(field1, ' ', field2) = 'apple peach';