Du är på rätt väg. Lägg bara till en 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;
Eller alternativt:
ORDER BY ord DESC
Båda dessa sätter ord = 0 rad sist.
EDIT:
Erwin tar upp en bra poäng att ur indexanvändningens perspektiv är en OR i WHERE klausul är inte det bästa tillvägagångssättet. Jag skulle ändra mitt svar till att vara:
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;
Detta gör att frågan kan använda två index (street och ord ). Observera att detta egentligen bara beror på att LIKE mönstret börjar inte med ett jokertecken. Om LIKE mönstret börjar med ett jokertecken, sedan skulle den här formen av frågan fortfarande göra en fullständig tabellskanning.