Supongamos que hay una tabla con las ciudades de un país (la estructura no es importante, puede ser cualquier campo varchar) y deseo encontrar las ciudades que tienen un lexema, por ejemplo iba.
Lo obvio es hacer:
Código MySQL :
SELECT `nombreciudad` FROM `ciudades` WHERE LOWER(`nombreciudad`) LIKE LOWER('%iba%');
Esto devolverá una lista tal como:
Código :
Ibañez Juan F. Ibarra Libano Pedro Nicolas Escribano Villa Garibaldi Ibahay Arribeños Ibaviyu Nacimientos de Arriba Puesto de Arriba Punta de Aguas Arriba
Como deseo los resultados ordenados, entonces:
Código MySQL :
SELECT `nombreciudad` FROM `ciudades` WHERE LOWER(`nombreciudad`) LIKE LOWER('%iba%') ORDER BY `nombreciudad`;
Me devuelve:
Código :
Arribeños Ibahay Ibañez Ibaviyu Juan F. Ibarra Libano Nacimientos de Arriba Pedro Nicolas Escribano Puesto de Arriba Punta de Aguas Arriba Villa Garibaldi
Sin embargo lo que deseo es que aquellos resultados que comiencen con el lexema buscado aparezcan primero, y luego de estos los que tengan el lexema en cualquier otra parte.
O sea, deseo que el ejemplo esté ordenado así:
Código :
Ibahay Ibañez Ibaviyu Arribeños Juan F. Ibarra Libano Nacimientos de Arriba Pedro Nicolas Escribano Puesto de Arriba Punta de Aguas Arriba Villa Garibaldi
Si uso esta consulta:
Código MySQL :
SELECT `nombreciudad` FROM `ciudades` WHERE LOWER(`nombreciudad`) LIKE LOWER('iba%') ORDER BY `nombreciudad`;
Me trae solo los que comienzan con el lexema pero no los demás. Y hacer algo como esto:
Código MySQL :
SELECT `nombreciudad` FROM `ciudades` WHERE (LOWER(`nombreciudad`) LIKE LOWER('iba%')) OR (LOWER(`nombreciudad`) LIKE LOWER('%iba%')) ORDER BY `nombreciudad`;
Es lo mismo que el primer caso.
Me gustaría resolver esto con una sola consulta. ¿Alguna idea?.