2014-03-19 23 views
2

我有以下代碼以在具有所有三個名稱的字段中搜索名稱,所以我已經被迫爆炸字符串以獲得更好的結果,如下所示如何按照爆炸字符串中的名字(SQL)

$search_terms = explode(" ", $key); 
$count = count($search_terms); 
$tick= 0; 
$query = ""; 
for($i = 0; $i < $count; $i++) { 
    $tick++; 
    $query .= "SELECT * "; 
    $query .= "FROM agents "; 
    $query .= "WHERE names "; 
    $query .= "LIKE '%".$search_terms[$i]."%' "; 
    $query .= "OR company LIKE '%".$search_terms[$i]."%' "; 
    if($tick != $count) 
    $query .= " UNION "; 
} 
    $query .="ORDER BY names ASC "; 

問題是,一旦像Lawrence Gabriel和我的數據庫這樣的搜索查詢確實有Lawrence Gabriel,而且還有Edward Gabriel,我會得到Edward Lawrence之前列出的Edward結果。 我想要列出所有'Gabriels',但我的結果是按搜索框中鍵入的名字排序的。如果名字,第二個名字在單獨的列中,這會更容易。

我該如何達到預期的效果?

+0

我想從表中檢索所有列,因此SELECT * – andromeda

+1

請選擇此項:[Mysql:Order by like?](http://stackoverflow.com/questions/3609166/mysql-order-by-like ) – AbraCadaver

回答

2

試試這個

ORDER BY SUBSTRING_INDEX(names, ' ', 1) ASC 

這將由名字責令空間之前

Demo

,你可以使用它像也:

SELECT id, names, SUBSTRING_INDEX(names, ' ', 1) name 
FROM agents 
WHERE names 
LIKE '%".$search_terms[$i]."%' 
OR company LIKE '%".$search_terms[$i]."%' 
ORDER BY name asc 

DEMO

+0

這實際上有效,但我必須玩弄計數並將其更改爲-2以獲得理想的結果。非常感謝! – andromeda

+0

歡迎你,是的,你可以隨心所欲玩:) –