2012-09-17 36 views
1

比方说,我有这个表:MySQL和多关键字多行搜索

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请求会怎么做呢?

感谢

回答

1

尝试此查询

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

SELECT * FROM TABLE_NAME WHERE CONCAT(field1,'',field2)like'%apple%'and CONCAT(field1,'',field2 )像'%桃';是我想要的 – Mathieu

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

这似乎是我想要做的,但我不希望搜索的确切字苹果,可以applepie例如,是否会做吗? – Mathieu

+0

@Mathieu所以如果'applepeach'这个词,你的例子中的所有行将被选中? – xdazz

+0

是的这就是它... – Mathieu

1

足够简单,你要检查是否field1是“苹果”和field2是“桃花”,所以WHERE field1='apple' AND field2='peach'将做到这一点。

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

类似以下内容可能工作:

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

或者,交换'fieldX'和'apple,peach'的顺序,类似于xdazz的答案。 – slugonamission

+0

这将选择所有行。 – xdazz

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

+1

鉴于用户搜索“苹果桃”的问题,我认为OP需要更广义的方法。 – slugonamission

+0

在您评论时正在编辑 – Yaroslav

+1

'field1 IN(field1,field2,field3) AND field2 IN(field1,field2,field3)'将始终为真。 – xdazz