[英]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
列是否与关键字匹配(如果它们都以空格为前缀)。 目前还不清楚为什么,但我的猜测是试图阻止匹配单词的一部分,比如将Kia
与Nokia
匹配。 这种方法确实有一个弱点,因为它最终仍会匹配带有额外字母的单词 - 搜索Audi
会返回Audioslave
等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.