キーワードを使用して検索を実行していると仮定します: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 .....)
について考えていましたが、別の方法で注文する方がはるかに簡単です(実際のクエリは本当に長いです)
そのような順序を作成するためのトリックはありますか?
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
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