LIKE문으로 검색하고 연관성 깊은 것부터 출력하기
LIKE문으로 검색하고 연관성 깊은 것부터 출력하기
환경
Lalavel PHP
mySql
문제
보통 유사한 결과값을 찾을 때 like문을 사용하면 쉽게 찾을 수 있다.
*데이터베이스*
SLECT * FROM user WHERE name LIKE '%이름%'
*Laravel*
$query = $this->select('*') ->where('name', 'LIKE', '%이름%');
하지만 이러한 데이터가 있을 때 연관성이 깊은 순서대로 출력하고 싶은데 어떻게 해야할까 검색을 하다가 발견했다!
데이터 출력하고 싶은 순서 이름1 이름 이름 이름1 1이름 1이름
바로 ORDER BY CASE THEN을 사용하는 것이다!
해결
*데이터베이스*
SELECT * FROM user WHERE name LIKE '%이름%' ORDER BY CASE WHEN name = '이름' THEN 0 WHEN name = '이름%' THEN 1 WHEN name = '%이름%' THEN 2 WHEN name = '%이름' THEN 3 ELSE 4 END
*Laravel*
$query = $this->select('*') ->where('name', 'LIKE', '%이름%') ->orderBy(DB::raw(' CASE WHEN name="이름" THEN 0 WHEN name="이름%" THEN 1 WHEN name="%이름%" THEN 2 WHEN name="%이름" THEN 3 ELSE 4 END ));
이렇게하면 원하는 유사한 결과값을 정렬된 상태로 가져올 수 있다 ☺️
from http://become-a-developer.tistory.com/49 by ccl(A) rewrite - 2020-03-11 02:54:36
댓글
댓글 쓰기