Sei sulla strada giusta. Basta aggiungere un 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;
Oppure, in alternativa:
ORDER BY ord DESC
Ognuno di questi metterà ord = 0
ultima riga.
MODIFICA:
Erwin solleva un buon punto che dal punto di vista dell'utilizzo dell'indice, un OR
nel WHERE
la clausola non è l'approccio migliore. Modificherei la mia risposta in:
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;
Ciò consente alla query di utilizzare due indici (street
e ord
). Nota che questo è davvero solo perché il LIKE
il modello non inizia con un carattere jolly. Se il LIKE
pattern inizia con un carattere jolly, quindi questa forma della query eseguirà comunque una scansione completa della tabella.