我有一个查询,它根据用户的输入搜索股票编号。我试图找到最接近输入的前5项。如果一个股票号码完全匹配,首先显示该项目。
SELECT
ID, Stock
FROM `store_items`
WHERE Stock = '$query' OR Stock LIKE '%$query%' LIMIT 5因此,如果在我的数据库中有以下股票#:
MC-10
MC-11
MC-12
MC-100
MC-102
MC-103我搜索MC-10,准确的结果应该首先显示出来,然后是其他匹配,如下所示:
MC-10
MC-100
MC-102
MC-103我如何完成这个查询的ORDER BY部分来实现这一点?
发布于 2016-04-15 22:26:43
你可以试着
ORDER BY CAST(SUBSTRING(Stock,LOCATE('-', Stock) +1, LENGTH(Stock) - LOCATE('-', Stock)) AS INT);发布于 2016-04-15 22:37:20
使用
ORDER BY Stock = '$query' DESCTRUE被视为1,而FALSE是0,因此这将首先对等号行排序。
发布于 2016-04-15 22:40:22
我会命令Levenshtein距离的结果来做这件事,但它可能不是很快的。
在这个地方,我从is:https://jonlabelle.com/snippets/view/sql/mysql-levenshtein-distance-algorithm抓取了Levenshtein在https://jonlabelle.com/snippets/view/sql/mysql-levenshtein-distance-algorithm中的实现。
(我不会剽窃答案,因为谷歌会给你找很多例子)
下面是一个小提琴示例:http://sqlfiddle.com/#!9/099a4/1,所以您的查询如下:
Select *, levenshtein_ratio('MC-10', productName) From ForgeRock WHERE productName like '%MC-10%'
ORDER BY levenshtein_ratio('MC-10', productName) desc, productName ASChttps://stackoverflow.com/questions/36657672
复制相似问题