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
'SERVER > LARAVEL & PHP' 카테고리의 다른 글
Laravel + vuejs Access to XMLHttpRequest at been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 오류 해결 (0) | 2021.01.21 |
---|---|
Laravel+vue+vuetify 설정하기 (0) | 2021.01.07 |
php 메모리 부족 오류(수정) (0) | 2020.06.04 |
laravel fcm push 보내기 (2) | 2020.01.23 |
php에서 ajax 사용하기 (0) | 2019.12.24 |