SERVER/LARAVEL & PHP

LIKE문으로 검색하고 연관성 깊은 것부터 출력하기

나나나나나나나ㅏ나난ㄴ나ㅏ나나 2020. 2. 25. 18:24
728x90

환경

  • 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
                        ));
                            
             

 

이렇게하면 원하는 유사한 결과값을 정렬된 상태로 가져올 수 있다 ☺️

728x90