복붙노트

[SQL] MySQL의 : 등에 의해 주문?

SQL

MySQL의 : 등에 의해 주문?

우리는 검색을 사용하여 키워드를 수행한다고 가정 : 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. ==============================

    1.

    order by case 
        when name LIKE "%John%" then 1 
        when name LIKE "%Doe%"  then 2 
        else 3 
    end
    
  2. ==============================

    2.당신이 주문을 할 수있는 부울 전체 텍스트 검색, 읽기 최대.

    당신이 주문을 할 수있는 부울 전체 텍스트 검색, 읽기 최대.

  3. ==============================

    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. ==============================

    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. ==============================

    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  
    
  6. from https://stackoverflow.com/questions/3609166/mysql-order-by-like by cc-by-sa and MIT license