我在数据库中设置搜索值的优先级时出现问题。我想找到所有课程,在名称课程中有一个短语(或包含短语的单词)。 此外,与搜索词组具有完全相同名称的课程位于返回数据的第一位。
课程表的记录:
+----+------+-------------------+
| 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是最匹配的,并且在返回的数据中位居第一。问题,我该怎么做?
提前致谢!
答案 0 :(得分:3)
这可能会成功。
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.然后它按升序排序。