programing

Mysql: 좋아요?

yellowcard 2023. 10. 22. 20:00
반응형

Mysql: 좋아요?

키워드1, 키워드2, 키워드3을 사용하여 검색을 수행한다고 가정합니다.

데이터베이스에 "이름" 열이 있는 레코드가 있습니다.

1: John Do2: Samuel Do3: 존 스미스애나 스미스

이제 쿼리:

SELECT * FROM users WHERE (name LIKE "%John%" OR name LIKE "%Doe%")

1,2,3(이 순서대로) 레코드를 선택합니다만, 예를 들어 키워드로 주문하고 싶습니다.keyword1=John, keyword2=Doe그래서 키워드별로 나열해야 합니다: 1,3,2 ("John"을 검색한 후 "Doe" 검색을 수행하고 싶기 때문입니다)

생각하고 있었습니다.SELECT DISTINCT FROM (...... UNION .....)그러나 다른 방법으로 주문하는 것이 훨씬 쉬워질 것입니다(실제 쿼리는 정말 깁니다).

그런 질서를 만드는 요령이 있습니까?

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

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

주문할 수 있는 Boolean Fulltext Searchs에 대해 읽어 보십시오.

 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

나의 예는 모든 것을 주문할 것입니다.John가 알파벳 순으로 뒤를 잇고 있습니다.Doe의.

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  

언급URL : https://stackoverflow.com/questions/3609166/mysql-order-by-like

반응형