Du er på rette vej. Du skal blot tilføje 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
Hver af disse vil sætte ord = 0
række sidst.
EDIT:
Erwin kommer med en god pointe, at fra indeksbrugsperspektivet er en OR
i WHERE
klausul er ikke den bedste tilgang. Jeg vil ændre mit svar til at være:
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;
Dette gør det muligt for forespørgslen at gøre brug af to indekser (street
og ord
). Bemærk, at dette egentlig kun er fordi LIKE
mønsteret starter ikke med et jokertegn. Hvis LIKE
mønsteret starter med et jokertegn, så ville denne form for forespørgslen stadig udføre en fuld tabelscanning.