如何设置搜索值的优先级

时间:2014-03-06 12:47:56

标签: mysql sql

我在数据库中设置搜索值的优先级时出现问题。我想找到所有课程,在名称课程中有一个短语(或包含短语的单词)。 此外,与搜索词组具有完全相同名称的课程位于返回数据的第一位。

课程表的记录:

+----+------+-------------------+
| 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是最匹配的,并且在返回的数据中位居第一。问题,我该怎么做?

提前致谢!

1 个答案:

答案 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.然后它按升序排序。