'cards'というINNODBテーブルに約20,000行あるので、FULLTEXTはオプションではありません。
この表を検討してください。
id | name | description
----------------------------------------------------------
1 John Smith Just some dude
2 Ted Johnson Another dude
3 Johnathan Todd This guy too
4 Susan Smith Her too
5 Sam John Bond And him
6 John Smith Same guy as num 1, another record
7 John Adams Last guy, promise
したがって、ユーザーが「ジョン」を検索すると、結果セットを次の順序にする必要があります。
7 John Adams
6 John Smith
3 Johnathan Todd
5 Sam John Bond
2 Ted Johnson
「JohnSmith」を一度だけプルしたので、彼の最新のエントリを取得したことに注意してください。私のデータによると、すべての名前はまったく同じ人物のものであり、ジョン・スミスという2人の異なる人物について心配する必要はありません。アイデア?何か明確にできるかどうか教えてください。
バージョン1:
SELECT max(id) id, name
FROM cards
WHERE name like '%John%'
GROUP BY name
ORDER BY CASE WHEN name like 'John %' THEN 0
WHEN name like 'John%' THEN 1
WHEN name like '% John%' THEN 2
ELSE 3
END, name
バージョン2:
SELECT max(id) id, name
FROM cards
WHERE name like '%John%'
GROUP BY name
ORDER BY CASE WHEN name like 'John%' THEN 0
WHEN name like '% %John% %' THEN 1
WHEN name like '%John' THEN 2
ELSE 3
END, name