Estás en el camino correcto. Simplemente agregue 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;
O, alternativamente:
ORDER BY ord DESC
Cualquiera de estos pondrá el ord = 0
última fila.
EDITAR:
Erwin menciona un buen punto que, desde la perspectiva del uso del índice, un OR
en el WHERE
cláusula no es el mejor enfoque. Modificaría mi respuesta para que sea:
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;
Esto permite que la consulta utilice dos índices (street
y ord
). Tenga en cuenta que esto es realmente solo porque LIKE
patrón no comienza con un comodín. Si el LIKE
el patrón comienza con un comodín, entonces esta forma de consulta aún haría un escaneo completo de la tabla.