mysql非字母顺序?

标签 mysql sql

我有这张表:

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)

最佳答案

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

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

您需要在 order by 中添加 DESC,因为匹配 (true) 的排名高于不匹配 (false)。

关于mysql非字母顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27354342/

相关文章:

mysql - 调整 SQL 查询

mysql - SQL:如何通过另一个表中的值查询表?

php - 尝试将键值插入 MySQL 表时出错

sql - 日期的唯一约束

sql - 必须声明标量

mysql - 插入触发器不起作用

php - 选择当前用户的所有好友id?

mysql - 向客户端公开数据库主键

php - 如何从数据库中检索 id 以删除信息?

mysql - 子查询统计MySQL中的字符串