我在为数据库中的搜索值设置优先级时遇到了问题。我想找到名称类(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/