繁体   English   中英

在SQL中使用CONCAT运算符

[英]Use of CONCAT operator in 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.

BUt我的问题是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有什么影响?

CONCAT(' ', Name)为列值预先设置空格。 结合使用

LIKE '% Toyota%'

这可以防止在一个单词中找到丰田 ,但允许在该字段的开头找到它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM