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

演算子は 2 つのLIKEワイルドカード文字を使用します。についてはすでに知っていますが%_(基本的に「任意の文字の正確な 1 つ」を意味します) もあります。

したがって、次のような2番目のクエリを実行できます

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

前後に少なくとも 1 文字ある場合にのみ一致する必要があり$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 に答える