0

在表的所有列中搜索子字符串。结果按以下顺序显示:
1.第一个结果以子字符串开头。
2.Then 结果是哪个子串在中间而不是最后
3.然后得出最后是哪个子字符串。在中间而不是最后
搜索子字符串时会出现问题,因为像 %substring% 也将包含实际上最后的 %substring 。因此不保留顺序。

foreach($results as $r){
$append1 ="select * from ".$tablename." WHERE ".$r['COLUMN_NAME']." like'".$substring."%'union ";
$query1 = $query1.$append1;
}  
foreach($results as $r){
$append2 ="select * from ".$tablename." WHERE ".$r['COLUMN_NAME']." like'%".$substring."%'union";
$query2 = $query2.$append2;
}
foreach($results as $r){
$append3 ="select * from ".$tablename." WHERE ".$r['COLUMN_NAME']." like'%".$substring."'union";
$query3 = $query3.$append3;
}
$query4=$query1.$query2.$query3;
$query4 = substr($query4, 0, -5);
4

3 回答 3

1

运算符使用LIKE两个通配符。您已经知道%,但也有_(这基本上意味着“恰好是任何角色之一”)。

所以你可以做第二个查询

$append2 ="SELECT * FROM $tablename WHERE {$r['COLUMN_NAME']} LIKE '_%{$substring}%_' union";

$substring它应该只匹配之前和之后至少有一个字符的地方。

于 2013-08-06T20:55:43.307 回答
0

您需要在 WHERE 子句中添加一个额外的位以排除字符串在末尾的位置。

$append2 ="select * from ".$tablename." WHERE ".$r['COLUMN_NAME']." like '%".$substring."%' AND ".$r['COLUMN_NAME']." NOT like '%".$substring."' union";

顺便说一句,不推荐使用 mysql_* 函数,您应该真正查看 mysqli 或 PDO。

于 2013-08-06T20:49:36.233 回答
0

您可以改用正则表达式。例如:

 $append1 ="select * from ".$tablename." WHERE ".$r['COLUMN_NAME']." REGEXP '".$substring."$' union ";  // match ending

 $append1 ="select * from ".$tablename." WHERE ".$r['COLUMN_NAME']." REGEXP '[[:print:]]".$substring."[[:print:]]' union ";  // match middle

 $append1 ="select * from ".$tablename." WHERE ".$r['COLUMN_NAME']." REGEXP '^".$substring."' union ";  // match beginning
于 2013-08-06T20:53:04.197 回答