mysql非字母顺序?

dav*_*vid 3 mysql sql

我有这张桌子:

id | businessName|  keywords
============================
 1      Adam         FOX
 2      FOX          bla bla bla      
Run Code Online (Sandbox Code Playgroud)

用户插入一个字符串,我想在businessName和keywords列中搜索这个字符串.所以我运行这个查询:

SELECT * FROM `business` WHERE `businessName` LIKE '%str%' OR `keywords` LIKE '%str%'
Run Code Online (Sandbox Code Playgroud)

我的问题:

首先,我希望获得名称匹配str的业务,然后获得关键字匹配的业务str.

即:用户输入单词FOX,mysql将返回两个商家(adam和FOX),在这种情况下我希望mysql首先返回FOX(因为它的名称匹配str)然后返回Adam(因为它的关键字匹配str)

Gol*_*rol 5

您可以按基于匹配生成的值进行排序:

SELECT 
  * 
FROM `business` 
WHERE 
  `businessName` LIKE '%str%' OR 
  `keywords` LIKE '%str%'
ORDER BY
  CASE WHEN `businessName` LIKE '%str%' THEN
    0
  ELSE
    1
  END
Run Code Online (Sandbox Code Playgroud)

上面的例子非常通用,但以下内容也适用于MySQL,只是按条件排序:

SELECT 
  * 
FROM `business` 
WHERE 
  `businessName` LIKE '%str%' OR 
  `keywords` LIKE '%str%'
ORDER BY
  `businessName` LIKE '%str%' DESC
Run Code Online (Sandbox Code Playgroud)

您需要DESC按顺序添加,因为匹配(true)将排名高于不匹配(false).