Tu es sur la bonne piste. Ajoutez simplement 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;
Ou, alternativement :
ORDER BY ord DESC
L'un ou l'autre mettra le ord = 0
ligne en dernier.
MODIFIER :
Erwin soulève un bon point que du point de vue de l'utilisation de l'index, un OR
dans le WHERE
clause n'est pas la meilleure approche. Je modifierais ma réponse pour être :
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;
Cela permet à la requête d'utiliser deux index (street
et ord
). Notez que c'est vraiment uniquement parce que le LIKE
pattern ne commence pas par un caractère générique. Si le LIKE
modèle commence par un caractère générique, alors cette forme de requête effectuerait toujours une analyse complète de la table.