あなたは正しい方向に進んでいます。 order by
を追加するだけです :
SELECT street, zip, city
FROM address
WHERE street LIKE 'Test%' OR ord = 0
ORDER BY (CASE WHEN street LIKE 'Test%' THEN 1 ELSE 0 END) DESC
LIMIT 1;
または、代わりに:
ORDER BY ord DESC
これらのいずれかにより、ord = 0
が配置されます 最後の行。
編集:
アーウィンは、インデックスの使用の観点から、OR
という良い点を提起します WHERE
で 条項は最善のアプローチではありません。答えを次のように変更します:
SELECT *
FROM ((SELECT street, zip, city
FROM address
WHERE street LIKE 'Test%'
LIMIT 1
)
UNION ALL
(SELECT street, zip, city
FROM address
WHERE ord = 0
LIMIT 1
)
) t
ORDER BY (CASE WHEN street LIKE 'Test%' THEN 1 ELSE 0 END) DESC
LIMIT 1;
これにより、クエリで2つのインデックス(street
)を利用できるようになります。 およびord
)。これは実際にはLIKE
が原因であることに注意してください パターンはワイルドカードで始まりません。 LIKE
の場合 パターンはワイルドカードで始まり、この形式のクエリでも全表スキャンが実行されます。