[SQL] MySQL의 : 등에 의해 주문?
SQLMySQL의 : 등에 의해 주문?
우리는 검색을 사용하여 키워드를 수행한다고 가정 : KEYWORD1, KEYWORD2, KEYWORD3
열 "이름"을 데이터베이스에 기록이 있습니다
1: John Doe 2: Samuel Doe 3: John Smith 4: Anna Smith
지금 검색어 :
SELECT * FROM users WHERE (name LIKE "%John%" OR name LIKE "%Doe%")
이 레코드를 선택합니다 : 1,2,3 (순서대로) 하지만 난 키워드를 주문하려면 예를 들어 KEYWORD1에서 = 존, KEYWORD2 = 미상 이 키워드로 나열되어야하므로 : 1,3,2 (내가 "존"을 검색 한 후 "미상"에 대한 검색을 수행 할 때문에)
나는 별개의 SELECT에 대해 생각했다 (... UNION .....) 하지만 다른 방법으로 어떻게 든 그것을 주문하는 것이 훨씬 쉬울 것입니다 (실제 쿼리는 긴 정말)
이러한 순서를 만들 수있는 트릭이있다?
해결법
-
==============================
1.
order by case when name LIKE "%John%" then 1 when name LIKE "%Doe%" then 2 else 3 end
-
==============================
2.당신이 주문을 할 수있는 부울 전체 텍스트 검색, 읽기 최대.
당신이 주문을 할 수있는 부울 전체 텍스트 검색, 읽기 최대.
-
==============================
3.RedFilter의 대답에 구축하기 위해, 당신은 정상에있을 두 키워드가 행을 만들 수 있습니다 :
RedFilter의 대답에 구축하기 위해, 당신은 정상에있을 두 키워드가 행을 만들 수 있습니다 :
order by case when (name LIKE "%John%" and name LIKE "%Doe%") then 1 when name LIKE "%John%" then 2 when name LIKE "%Doe%" then 3 end
-
==============================
4.
SELECT * from ( SELECT u.*, 1 OrderNum FROM users WHERE (name LIKE "%John%") UNION SELECT u.*, 2 OrderNum FROM users WHERE (name LIKE "%Doe%") ) Order by OrderNum
-
==============================
5.존의 알파벳의 모든 주문 것입니다 내 예는 미상의 하였다.
존의 알파벳의 모든 주문 것입니다 내 예는 미상의 하였다.
ORDER BY CASE WHEN name LIKE "John%Doe" THEN CONCAT('a',name) WHEN name LIKE "John%" THEN CONCAT('b',name) WHEN name LIKE "%Doe" THEN CONCAT('c',name) ELSE name END
from https://stackoverflow.com/questions/3609166/mysql-order-by-like by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 테이블에서 날짜가 기록의 가장 최근의 세트를 선택하는 방법 (0) | 2020.04.30 |
---|---|
[SQL] 단정를 사용하는 경우 연결을 닫기 (0) | 2020.04.30 |
[SQL] 하위 쿼리와 상관 하위 쿼리의 차이 (0) | 2020.04.30 |
[SQL] MySQL은 Case 문 (0) | 2020.04.30 |
[SQL] VARCHAR와 DATE / DATETIME을 사용하는 경우 (0) | 2020.04.30 |