如何订购查询以查找value =或LIKE的位置

时间:2016-04-15 22:12:38

标签: mysql

我有一个查询,可以根据用户的输入搜索库存号。我试图找到最接近输入的前5项。如果库存编号完全匹配,请先显示该项目。

  SELECT
  ID, Stock
  FROM `store_items`
  WHERE Stock = '$query' OR Stock LIKE '%$query%' LIMIT 5

所以,如果在我的数据库中,我有以下股票#' s:

MC-10
MC-11
MC-12
MC-100
MC-102
MC-103

我搜索MC-10,首先应显示确切的结果,然后是其他类似的匹配:

MC-10
MC-100
MC-102
MC-103

如何执行此查询的ORDER BY部分来实现这一目标?

3 个答案:

答案 0 :(得分:0)

您可以尝试

ORDER BY CAST(SUBSTRING(Stock,LOCATE('-', Stock) +1,  LENGTH(Stock) - LOCATE('-', Stock)) AS INT);

答案 1 :(得分:0)

使用

ORDER BY Stock = '$query' DESC

TRUE被视为1FALSE被视为0,因此这将首先排序相等的行。

答案 2 :(得分:0)

我会按照Levenshtein距离来命令结果,但它可能不会很快。

这个地方我在MySQL中抓住了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 ASC