web-dev-qa-db-ja.com

Mysql:いいね

キーワードを使用して検索を実行していると仮定します:keyword1、keyword2、keyword3

データベースに列「名前」を持つレコードがあります:

 1:ジョンドウ
 2:サミュエルドウ
 3:ジョンスミス
 4:アンナスミス

今クエリ:

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

それはレコードを選択します:1,2,3(この順序で)ですが、例_keyword1=John, keyword2=Doe_ではキーワードで並べ替えたいので、キーワードでリストする必要があります:1,3,2(検索を実行したいため) 「ジョン」を検索した後の「ドゥ」の場合)

私はSELECT DISTINCT FROM (...... UNION .....)について考えていましたが、別の方法で注文する方がはるかに簡単です(実際のクエリは本当に長いです)

そのような順序を作成するためのトリックはありますか?

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

ブール全文検索 を読んで、順序付けを行うことができます。

3
fredley

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
3
Juan Tarquino
 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
2