はい、検索文字列の最初の出現順で並べることができます。(フィールド LIKE "term%" を書きたかったとします。)
SELECT *, LOCATE('term', field) as rev_score FROM table WHERE field LIKE "%term%" ORDER BY rev_score DESC LIMIT 20;
ただし、このクエリは、フィールド "term%" よりもはるかに遅くなる可能性があります (フィールドにインデックスがあると仮定します)。
- あなたの場合、フィールド LIKE "term%" は、フィールドのインデックスによって満たされる可能性があり、その結果、範囲クエリになりますが、それでも高速です。
- field LIKE "%term%" LIMIT 10 順序を使用しない場合でも、高速化できます(より速い)。検索ワードやデータ分布にもよりますが、私が書いたソリューションよりも統計的に2倍高速です。その理由は、MySQL が「用語」を検索するテーブルをスキャンし始めるためです (ここではインデックスを使用できません)。10 個の要素が見つかると停止します。これは、テーブルの最初にある場合があります。
- 私が書いたものは、計算された値のファイルソートよりも、 MySQL がテーブル全体でフルスキャンを実行し、すべての行で「用語」をチェックするようにします。おそらく、単一のテーブル ルックアップで起こりうる最悪の事態です。
両方のバージョンを試して、より高速なバージョンを使用することをお勧めします。または、データセットが大きい場合は、MySQL の全文検索機能をチェックアウトできます (MYISAM にはそれがあり、MySQL 5.6 以降では InnoDB もサポートしています)。