2013-08-06 92 views
0

在表格的所有列中搜索子字符串。結果按以下順序顯示:
1.以substring開頭的第一個結果。
2.然後結果在哪個子字符串中間,而不是最後
3.然後結果子串是最後。
的問題中間,而不是在最後因爲像%字符串%搜索字符串時,也將包含%子實際上在最後。所以不保留順序出現。如何在另一個字符串的中間搜索字符串

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); 
+0

取決於你真的想要做什麼你可能會更好與全文搜索與分數 – cmorrissey

回答

1

LIKE運算符使用兩個通配符。你已經知道%,但也有_(基本上意思是「任何角色中的一個」)。

這樣你就可以做第二次查詢像

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

,它應該只匹配那裏的後$substring和一個前至少一個字符。

0

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

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

另外,不推薦使用mysql_ *函數,而應該真正查看mysqli或PDO。

0

您可以改爲使用regular expressions。例如:

$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 
相關問題