2014-02-15 61 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首先启动的名称。