首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何排序查询,以搜索哪里的值=或类似

如何排序查询,以搜索哪里的值=或类似
EN

Stack Overflow用户
提问于 2016-04-15 22:12:38
回答 3查看 35关注 0票数 1

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

代码语言:javascript
复制
  SELECT
  ID, Stock
  FROM `store_items`
  WHERE Stock = '$query' OR Stock LIKE '%$query%' LIMIT 5

因此,如果在我的数据库中有以下股票#:

代码语言:javascript
复制
MC-10
MC-11
MC-12
MC-100
MC-102
MC-103

我搜索MC-10,准确的结果应该首先显示出来,然后是其他匹配,如下所示:

代码语言:javascript
复制
MC-10
MC-100
MC-102
MC-103

我如何完成这个查询的ORDER BY部分来实现这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-15 22:26:43

你可以试着

代码语言:javascript
复制
ORDER BY CAST(SUBSTRING(Stock,LOCATE('-', Stock) +1,  LENGTH(Stock) - LOCATE('-', Stock)) AS INT);
票数 0
EN

Stack Overflow用户

发布于 2016-04-15 22:37:20

使用

代码语言:javascript
复制
ORDER BY Stock = '$query' DESC

TRUE被视为1,而FALSE0,因此这将首先对等号行排序。

票数 0
EN

Stack Overflow用户

发布于 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,所以您的查询如下:

代码语言:javascript
复制
Select *, levenshtein_ratio('MC-10', productName) From ForgeRock WHERE productName like '%MC-10%' 
ORDER BY levenshtein_ratio('MC-10', productName) desc, productName ASC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36657672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档