Mysql 如何排序查询以搜索value=或类似的位置
我有一个根据用户输入搜索股票编号的查询。我试图找到与输入最匹配的前5项。如果库存编号完全匹配,则首先显示该项目Mysql 如何排序查询以搜索value=或类似的位置,mysql,Mysql,我有一个根据用户输入搜索股票编号的查询。我试图找到与输入最匹配的前5项。如果库存编号完全匹配,则首先显示该项目 SELECT ID, Stock FROM `store_items` WHERE Stock = '$query' OR Stock LIKE '%$query%' LIMIT 5 因此,如果我的数据库中有以下股票: 我搜索MC-10,准确的结果应该首先显示,然后是其他类似的匹配: MC-10 MC-100 MC-102 MC-103 如何执行此查询的orderb
SELECT
ID, Stock
FROM `store_items`
WHERE Stock = '$query' OR Stock LIKE '%$query%' LIMIT 5
因此,如果我的数据库中有以下股票:
我搜索MC-10
,准确的结果应该首先显示,然后是其他类似的匹配:
MC-10
MC-100
MC-102
MC-103
如何执行此查询的orderby
部分以实现此目的?您可以像这样尝试
ORDER BY CAST(SUBSTRING(Stock,LOCATE('-', Stock) +1, LENGTH(Stock) - LOCATE('-', Stock)) AS INT);
你可以试试看
ORDER BY CAST(SUBSTRING(Stock,LOCATE('-', Stock) +1, LENGTH(Stock) - LOCATE('-', Stock)) AS INT);
使用
TRUE
被视为1
,FALSE
被视为0
,因此这将首先排列相等的行。使用
TRUE
被视为1
,FALSE
被视为0
,因此这将首先对相等的行进行排序。我将按Levenshtein距离对结果进行排序,但这可能不是很快
我在MySQL中抓取了一个Levenshtein实现的地方是:
(我不会剽窃答案,因为谷歌会为你找到很多例子)
下面是一个fiddle示例:因此您的查询如下所示:
Select *, levenshtein_ratio('MC-10', productName) From ForgeRock WHERE productName like '%MC-10%'
ORDER BY levenshtein_ratio('MC-10', productName) desc, productName ASC
我会通过Levenshtein distance命令结果来执行此操作,但它可能不会很快 我在MySQL中抓取了一个Levenshtein实现的地方是: (我不会剽窃答案,因为谷歌会为你找到很多例子) 下面是一个fiddle示例:因此您的查询如下所示:
Select *, levenshtein_ratio('MC-10', productName) From ForgeRock WHERE productName like '%MC-10%'
ORDER BY levenshtein_ratio('MC-10', productName) desc, productName ASC
你可以看看这个主题:你可以看看这个主题:如果你的需求是直接的,并且通过其他两个答案解决,那么这个解决方案就是过度的。如果你的需求是直接的,并且通过其他两个答案解决,那么这个解决方案就是过度的。