在查询中使用CONCAT无法正常工作

时间:2011-09-17 19:36:22

标签: php mysql html

我有:

两种用于搜索的输入类型。一个是城市,州,邮政编码类型的文本字段。另一种是商业搜索“类型”的选择下拉列表。

我想返回“location”输入的结果以及“type”输入。因此,如果用户在“位置”输入中搜索纽约NY,83745并且在“类型”输入中仅Walgreens输入纽约纽约的Walgreens,则返回83745。 HOWEVER ,在我的查询中使用CONCAT方法限制了这一点。用户可以在“位置”输入中使用逗号和空格。但是,“类型”输入一起被忽略。如果我取出CONCAT并使用基本的单个WHERE子句,则两种搜索类型只能一起工作。那么,我怎样才能让CONCAT和"AND style LIKE '%$search_type%'";一起工作?

$query = "SELECT street, city, state, type FROM location
  WHERE 
  CONCAT(city, ', ', state, ', ', zip_code) LIKE '%$search_location%'
  OR CONCAT(city, ' ', state, ' ', zip_code) LIKE '%$search_location%'
  AND type LIKE '%$search_type%'";

2 个答案:

答案 0 :(得分:0)

尝试使用布尔全文搜索 http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

$query = "SELECT street, city, state, type FROM location
WHERE 
MATCH ($search_location) AGAINST (CONCAT(city, ' ', state, ' ', zip_code) IN BOOLEAN MODE)
AND type LIKE '%$search_type%'";

我认为这个例子不起作用,但如果你读到这个,你就会明白

答案 1 :(得分:-1)

mysql不支持此语法。 concat可以合并字符串,而不是列。

这是你最好的选择,我相信:

$query = "SELECT street, city, state FROM location
  WHERE 
  ( city LIKE '%$search_location%' or state  LIKE '%$search_location%' or zip_code LIKE '%$search_location%' )
   AND style LIKE '%$search_type%'";

正确匹配工作:

ALTER TABLE location ADD FULLTEXT(city, state, zip_code);

$query = "SELECT street, city, state FROM location
    WHERE match (city, state, zip_code) against ('$search_location' in boolean mode)
    AND style LIKE '%$search_type%'";