Вие сте на прав път. Просто добавете 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
шаблонът започва с заместващ знак, след което тази форма на заявката ще направи пълно сканиране на таблицата.