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

댓글

이 블로그의 인기 게시물

1. 라라벨설치 설정

PHP 라라벨프레임워크 설치하기 in CentOS 7

Remove Laravel bootstrap cache config.php uploaded to AWS