Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql和多关键字多行搜索_Mysql_Sql_Search_Sql Like - Fatal编程技术网

Mysql和多关键字多行搜索

Mysql和多关键字多行搜索,mysql,sql,search,sql-like,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 如果用户搜索“苹果桃子”,我想得到的行 2 | a

假设我有这张桌子:

id    |  field1  |  field2  |  field3  |  field4
 0    |  pear    |  peach   |  fruit   |  california
 1    |  apple   |  peas    |  xxxxxx  |  cupertino
 2    |  apple   |  peach   |  xxxxxx  |  san francisco
如果用户搜索“苹果桃子”,我想得到的行

2    |  apple   |  peach   |  xxxxxx  |  san francisco
搜索“applepie san francisco”或“applepeach fran”的结果与预期结果相同

那么mysql请求是什么呢


非常感谢非常简单,您需要检查
field1
是否为“苹果”,而
field2
是否为“桃子”,因此
field1='apple'和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')

简单地说,您需要检查
field1
是否为“apple”,而
field2
是否为“peach”,因此
field1='apple'和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')

您将使用某种参数来适应您的搜索。因此:

SELECT `id`, `field1`, `field2`, `field3`, `field4`
  FROM Table1
 WHERE whatyouarelookingfor_1 IN (field1, field2, field3) 
   AND whatyouarelookingfor_2 IN (field1, field2, field3)
编辑以添加IN子句,如前所述,它仅从一个字段中进行选择


这是一个简单的查询,请选中此选项,您将使用某种参数来适合您的搜索。因此:

SELECT `id`, `field1`, `field2`, `field3`, `field4`
  FROM Table1
 WHERE whatyouarelookingfor_1 IN (field1, field2, field3) 
   AND whatyouarelookingfor_2 IN (field1, field2, field3)
编辑以添加IN子句,如前所述,它仅从一个字段中进行选择

这是一个简单的查询,请检查此工作

尝试此查询

SELECT * FROM TABLE_NAME WHERE CONCAT(field1, ' ', field2) = 'apple peach';
请尝试此查询

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

或者,交换
fieldX
apple,peach
的顺序,类似于xdazz的答案。这将选择所有行。或者,交换
fieldX
apple,peach
的顺序,类似于xdazz的答案。这将选择所有行。如果问题表明用户搜索“apple peach”,我认为OP需要一种更普遍的方法。
field1in(field1,field2,field3)和field2in(field1,field2,field3)
永远都是正确的。OP肯定会使用参数……会再次编辑,以使其更具可读性,因为问题说明用户搜索“苹果桃子”,我认为OP需要一个更普遍的方法。
field1in(field1,field2,field3)和field2in(field1,field2,field3)
永远都是正确的。OP肯定会使用参数……会再次编辑以使其更具可读性这似乎是我想要做的,但我不想搜索确切的单词apple,例如,它可以是applepie,可以吗?@Mathieu那么如果
applepeach
是单词,那么示例中的所有行都将被选中?这似乎是我想做的,但我不想搜索确切的单词apple,例如,它可以是applepie,可以吗?@Mathieu那么如果
applepeach
是单词,示例中的所有行都将被选中?从表_NAME中选择*,其中CONCAT(field1',field2)类似于“%apple%”,CONCAT(field1',field2)类似于“%peach%”;是我想从表_NAME中选择的*,其中CONCAT(field1',field2)类似于“%apple%”,CONCAT(field1',field2)类似于“%peach%”;这就是我想要的