2014-03-06 2 views
1

데이터베이스의 검색 값 우선 순위 설정에 문제가 있습니다. 이름 과목에 문구가 있거나 (또는 ​​문구가 포함 된) 모든 과목을 찾고 싶습니다. Id 또한 검색된 구문과 정확히 같은 이름을 가진 코스가 반환 된 데이터의 첫 번째 위치에있었습니다.검색 값에 우선 순위를 설정하는 방법

기록하는 과정 테이블 :

+----+------+-------------------+ 
| 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가 가장 일치하며 반환 된 데이터의 첫 번째 위치입니다. 질문, 어떻게해야합니까?

미리 감사드립니다.

답변

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 

즉, 이름이 값과 같은지 확인한 다음 1로 설정하고 그렇지 않으면 2로 설정합니다. 그런 다음 오름차순으로 순서를 지정합니다.

+0

간단한 IF가 트릭을 수행해야한다고 생각하지 않습니까? 'IF (name = 'TEB lorem ipsum', 1, 2); ' – CentaurWarchief

+0

대단히 감사합니다! 첫 번째와 두 번째 솔루션은 훌륭합니다! 감사! – Piotr

관련 문제