Você está no caminho certo. Basta adicionar um
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;
Ou, alternativamente:
ORDER BY ord DESC
Qualquer um destes colocará o
ord = 0 linha por último. EDITAR:
Erwin traz um bom ponto que, da perspectiva do uso do índice, um
OR no WHERE cláusula não é a melhor abordagem. Eu modificaria minha resposta para ser: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;
Isso permite que a consulta use dois índices (
street e ord ). Observe que isso ocorre apenas porque o LIKE padrão não começa com um curinga. Se o LIKE padrão começa com um curinga, então essa forma de consulta ainda faria uma varredura completa da tabela.