Вие сте на прав път. Просто добавете 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;
Това позволява на заявката да използва два индекса (street и ord ). Имайте предвид, че това е наистина само защото LIKE моделът не започва с заместващ знак. Ако LIKE шаблонът започва с заместващ знак, след което тази форма на заявката ще направи пълно сканиране на таблицата.