在SQL中使用CONCAT运算符

时间:2013-07-28 14:56:08

标签: sql

我有一个搜索表单,我可以按名称搜索:

if($v=$_POST['Name']){
     $sql.=" AND CONCAT(' ',Name) LIKE '% $v%'";
     }
if($v=$_POST['PriceU']){
     $sql.=" AND Price BETWEEN '$_POST[PriceF]' AND '$_POST[PriceU]'";
     }
if($v=$_POST['RateU']) {
    $sql.=" AND Rate BETWEEN '$_POST[RateF]' AND '$_POST[RateU]'";
    }
if($v=$_POST['Cat']) {
    $sql.=" AND Category='$_POST[Cat]' ";
}

$resm=mysql_query ("SELECT * from members WHERE Level='$_GET[level]' $sql  Order By Name"); 

只是理解,我回应了'$ resm'。当我使用名称Toyota搜索时,这是生成的查询:

SELECT * FROM members
WHERE Level='2' AND
      CONCAT(' ',Name) LIKE '% Toyota%'
ORDER BY Name.

我的问题是CONCAT(' ',Name)在这里有什么用?我认为即使没有CONCAT它也应该有用。那是

if($v=$_POST['Name']){
  $sql.=" AND (' ',Name) LIKE '% $v%'";

然后生成的SQL是

SELECT * from members WHERE Level='2' AND Name LIKE '% Toyota%' Order By Name

但这不输出任何东西。这是为什么?这个查询出了什么问题,CONCAT有什么影响?

2 个答案:

答案 0 :(得分:4)

CONCAT(' ', Name)为列值预先添加空格。与

结合使用
LIKE '% Toyota%'

这可以防止在单词的中间找到 Toyota ,但允许在字段的开头找到它。

答案 1 :(得分:0)

CONCAT()接受两个或多个字符串作为参数,并通过将它们相互追加来组合它们。例如,CONCAT('hel', 'lo')会返回hello。您正在做的是检查Name列是否与关键字匹配,如果它们都以空格为前缀。目前还不清楚为什么,但我的猜测是试图阻止匹配单词的一部分,例如匹配KiaNokia。这种方法确实存在缺陷,因为它仍会匹配带有额外字母的字词 - 搜索Audi会返回Audioslave等等。

相关问题