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%”;这就是我想要的