Jste na správné cestě. Stačí přidat 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;
Nebo alternativně:
ORDER BY ord DESC
Každá z těchto možností vloží ord = 0
řada poslední.
EDIT:
Erwin uvádí dobrou věc, že z pohledu použití indexu OR
v WHERE
klauzule není nejlepší přístup. Upravil bych svou odpověď na:
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;
To umožňuje dotazu využívat dva indexy (street
a ord
). Všimněte si, že je to opravdu jen proto, že LIKE
vzor nezačíná zástupným znakem. Pokud LIKE
vzor začíná zástupným znakem, pak by tato forma dotazu stále prováděla úplné prohledání tabulky.