ただし、文字列の先頭からマッチするものを優先させたいのです。
1回のSQLでできるでしょうか?
通常、
『SELECT * FROM hoge WHERE name LIKE '%w%' ORDER BY name ASC;』
と入力すると、
『arrow, now, snow, wake, world』
のような順番になります。
しかし、そうではなく、
『wake, world, arrow, now, snow』
のように、まず文字列の頭からヒットするものを優先したいのです。
つまり、
『WHERE name LIKE 'w%' ORDER BY name ASC』と
『WHERE name LIKE '%w%' AND name NOT LIKE 'w%' ORDER BY name ASC』
の結果を、混ぜ合わせるのではなく、前後につなぎ合わせたいのです。
MySQL、またはSQLiteにおいて、どのような方法を採ればいいでしょうか?
なるべく1文のSQLで行いたいのですが…。
CASE文を使って以下のようにするのはどうでしょうか?
SELECT * FROM hoge WHERE name LIKE '%w%' ORDER BY (CASE WHEN name LIKE 'w%' THEN 0 ELSE 1 END), name ASC;
手元のSQLiteでは上手く動きました。
ただし大量データの場合のパフォーマンスがどうなるかは分かりませんが…。
今手元のPCでMSアクセスしかなくて、クエリーでやってみたのですが、
もうひとつ昇順のキイ項目を作ってそこに、
name LIKE 'w% だったら『1』をセットし、
そうでなかったら『2』をセットする
として、このキイ項目を昇順の第一キイとし、
nameを昇順の第二キイにすれば、wが先頭にくるnameの方が優先してソートされます。
vegahさんの教えてくださった方法が、すなわち
y-kawazさんの回答のSQLだったんですね。