MySQL非字母顺序排序?

3

我有这个表格:

id | businessName|  keywords
============================
 1      Adam         FOX
 2      FOX          bla bla bla      

用户输入了一个字符串,我想在businessName和keywords列中搜索这个字符串。因此,我运行了以下查询:

SELECT * FROM `business` WHERE `businessName` LIKE '%str%' OR `keywords` LIKE '%str%'

我的问题:

首先,我想获取名称与str匹配的企业,然后获取关键字与str匹配的企业。

例如:用户输入单词FOX,MySQL将返回两个企业(Adam和FOX),在这种情况下,我希望MySQL首先返回FOX(因为它的名称与str匹配),然后返回Adam(因为它的关键字与str匹配)。

1个回答

5
您可以按照基于匹配生成的值进行排序:
SELECT 
  * 
FROM `business` 
WHERE 
  `businessName` LIKE '%str%' OR 
  `keywords` LIKE '%str%'
ORDER BY
  CASE WHEN `businessName` LIKE '%str%' THEN
    0
  ELSE
    1
  END

上面的示例比较通用,但是下面的MySQL语句也应该能够工作,只需按条件排序即可:
SELECT 
  * 
FROM `business` 
WHERE 
  `businessName` LIKE '%str%' OR 
  `keywords` LIKE '%str%'
ORDER BY
  `businessName` LIKE '%str%' DESC

由于匹配(true)的优先级高于不匹配(false),您需要在 order by 中添加 DESC


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接