mysql - 如何设置搜索值的优先级

标签 mysql sql

我在为数据库中的搜索值设置优先级时遇到了问题。我想找到名称类(class)中有一个短语(或包含该短语的单词)的所有类(class)。 id加法,返回数据中与搜索词组同名的类(class)排在第一位。

类(class)表的记录:

+----+------+-------------------+
| id | code |        name       |
+----+------+-------------------+
| 1  | JPA  | JPA lorem ipsum   |
| 2  | JSF  | Jsf lorem ipsum   |
| 3  | HIB  | HIB lorem ipsum   |
| 4  | TEB  | TEB lorem ipsum   |
| 5  | ZRN  | Thanks in advance |
+----+------+-------------------+

我的查询:

 SELECT `course`.`id`, `course`.`name` 
 FROM `course` 
 WHERE `name` LIKE 'TEB lorem ipsum' or 
       `name` LIKE '%TEB%' or 
       `name` LIKE '%lorem%' or 
       `name` LIKE '%ipsum%'

数据库返回:

+----+-----------------+
| id |      name       |
+----+-----------------+
| 1  | JPA Lorem ipsum |
| 2  | Jsf Lorem ipsum |
| 3  | HIB Lorem ipsum |
| 4  | TEB lorem ipsum |
+----+-----------------+

我想收到:

+----+-----------------+
| id |      name       |
+----+-----------------+
| 4  | TEB lorem ipsum |
| 1  | JPA Lorem ipsum |
| 2  | Jsf Lorem ipsum |
| 3  | HIB Lorem ipsum |
+----+-----------------+

记录,具有4id的是最匹配的,在返回数据中排在第一位。问题,我该怎么做?

提前致谢!

最佳答案

这可能会成功。

SELECT `course`.`id`, `course`.`name` 
 FROM `course` 
 WHERE `name` LIKE 'TEB lorem ipsum' or 
       `name` LIKE '%TEB%' or 
       `name` LIKE '%lorem%' or 
       `name` LIKE '%ipsum%'
ORDER BY CASE WHEN `name`='TEB lorem ipsum' THEN 1 ELSE 2 END ASC

简而言之,它检查 name 是否等于 value 并给它一个 1,否则给它一个 2。然后按升序对其进行排序。

关于mysql - 如何设置搜索值的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22225035/

相关文章:

sql - 如果没有 CASE 语句,值为 0 则返回 1

mysql - 如何使用 Symfony 插件 DbFinderPlugin 制定查询以按列分组进行计数?

php - 如何在子表php中插入外键

php - 在同一脚本php中执行两个查询

sql - TSQL:解析具有各种字符的字符串

java - 将数据从 MySql 导入 HDFS 的最佳方式

mysql - 我有一个 mysql 查询,我试图同时添加一个计数和一个 WHERE 子句

mysql - mysql存储过程中的多个select语句

mysql - 为什么 SQL 查询通过 PHPMySQLAdmin 而不是通过 mysql_query?

c# - 显示重复项的组合框