Anda berada di jalur yang benar. Cukup tambahkan 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;
Atau, secara bergantian:
ORDER BY ord DESC
Salah satu dari ini akan menempatkan ord = 0
baris terakhir.
EDIT:
Erwin mengemukakan poin bagus bahwa dari perspektif penggunaan indeks, sebuah OR
di WHERE
klausa bukanlah pendekatan terbaik. Saya akan mengubah jawaban saya menjadi:
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;
Ini memungkinkan kueri menggunakan dua indeks (street
dan ord
). Perhatikan bahwa ini benar-benar hanya karena LIKE
pola tidak dimulai dengan wildcard. Jika LIKE
pola dimulai dengan karakter pengganti, maka bentuk kueri ini akan tetap melakukan pemindaian tabel penuh.