2014-02-15 57 views
0

我正在爲一個寵物項目網站編寫產品搜索引擎並遇到問題。我該如何退還他們用於查詢的「匹配多少」訂購的產品?現在我有這個,它只會返回查詢匹配開始的產品。返回按列「多少匹配」排列的MySQL列表

$sql = "SELECT * FROM `Products` WHERE name LIKE '$query%'"; 

一個放置在%$查詢前面像這樣

$sql = "SELECT * FROM `Products` WHERE name LIKE '%$query%'" 

達到了預期的輸出,但它沒有正確排序。例如,用戶搜索「p」,他們得到一個列表,如:[含p的單詞],[含p的B單詞],[P單詞]。我希望P字先出現,然後再出現A字。這可能只有MySQL?我查看了ORDER BY,但是按列AFAIK訂單。

+1

'ORDER BY LOCATE('$ query',name)'是你可以做的最好的。 –

回答

1

你可以用order by做到這一點:

SELECT * 
FROM `Products` 
WHERE name LIKE '%$query%'" 
ORDER BY (name like '$query%') desc, 
     name; 

第一句就會把與$query首先啓動的名稱。