2011-04-22 108 views
2

我有一个表(家乡,城市,地区,出版)的字段。我有一个搜索表单,有人可以输入国家或城市或地区。我想获得所有已发布的房屋= 1,并且任何搜索条件都与他们的任何字段匹配。php/mysql搜索多个值

这是我到目前为止有:

SELECT * FROM homes 
WHERE published = 1 
AND 
LOWER(country) LIKE '$search%' 
OR 
LOWER(city) LIKE '$search%' 
OR 
LOWER(area) LIKE '$search%' 

的问题是,它返回已发布= 0家...

回答

3

我会建议括号。

SELECT * FROM homes 
WHERE published = 1 
AND 
(
LOWER(country) LIKE '$search%' 
OR 
LOWER(city) LIKE '$search%' 
OR 
LOWER(area) LIKE '$search%' 
) 
2
SELECT * 
FROM homes 
WHERE published = 1 
     AND (country LIKE '$search%' 
       OR city LIKE '$search%' 
       OR area LIKE '$search%') 

就像已经做不区分大小写的东西,所以你不需要它。

缺省字符集和排序规则是latin1和latin1_swedish_ci,所以非二进制字符串比较默认情况下不区分大小写。这意味着如果使用col_name LIKE'a%'进行搜索,则会获得以A或a开头的所有列值。 http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

+0

.......... Jinx! – tamarintech 2011-04-22 20:04:54

+0

我的默认字符集是UTF-8,排序规则是utf_general_ci。我想我需要LOWER() – chchrist 2011-04-25 10:31:03