SQL - Consulta ORDER BY

 
Vista:

Consulta ORDER BY

Publicado por Gonzalo Torres (2 intervenciones) el 30/11/2010 20:16:54
Hola, qué tal?

Quiero ordenar una consulta, de forma que me muestre primero los resultados que tienen el mismo lenght que mi búsqueda.

Ejemplo de caso ideal:

DB => ["Uno", "Dos","UnoPrima", "DosPrima", "UnoPrimaPrima"]

SELECT text
FROM DB
WHERE text LIKE "%UnoPromo"
ORDER BY (lo que quiero saber)

Resultado:

UnoPrima
Uno
UnoPrimaPrima

Se puede hacer?

Muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Consulta ORDER BY

Publicado por Leonardo Josué (1173 intervenciones) el 30/11/2010 21:25:28
Buenas Tardes Gonzalo Torres:

Hay algunos detalles en tu post que tenemos que considerar, primero y antes que nada, en tu búsqueda LIKE escribiste "%UnoPromo", cuando lo que quisiste escribir es "UnoPrima", creo que el uso del comodín % está erroneo, ya que así la búsqueda se realizaría sobre las cadenas que terminen con "UnoPrima", y finalmente los resultados que pones como salida sólo ocurrirían si utilizas una condición "%Uno%". Te recomiendo que para la próxima tengas un poquito de más cuidado con estos detalles, que aunque parecieran no tener importancia pueden hacer que el problema no se entienda correctamente y por lo tanto sea más difícil tratar de ayudar.

Ahora bien, voy a plantear nuevos datos para ver si esto es lo que necesitas.

Supongamos que en tu tabla tienes algo como esto:

UnoUnoPrima
UnoPrima
DosPrima
TresPrima
DosDosPrima
TresUnoPrima

Supongamos que tu búsqueda entonces queda así:

SELECT text
FROM DB
WHERE text LIKE '%UnoPrima%'

Esta consulta te regresa entonces lo siguiente:

UnoUnoPrima
UnoPrima
TresUnoPrima

Ahora bien, según lo que entendí tu quieres que las cadenas que tengan la misma longitud que tu cadena de búsqueda aparezcan primero, lo podrías hacer así:

SELECT text
FROM DB
WHERE text LIKE '%UnoPrima%'
ORDER BY
CASE WHEN LEN(text) = LEN('UnoPrima') THEN 1 ELSE 2 END

Con esto el resultado quedaría así:

UnoPrima
UnoUnoPrima
TresUnoPrima

En tu post tampoco mencionas qué BD estás utilizando, el ejemplo está escrito para SQL Server, si utilizas otro Motor sería cuestión de que cambies la función LEN por la respectiva función para obtener la longitud de una cadena.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta ORDER BY

Publicado por Gonzalo Torres (2 intervenciones) el 30/11/2010 21:40:25
Muchísimas gracias! Funciona perfecto.

Si, disculpá el detalle del %, no lo ví. Y antes tenía promo y me olvidé de cambiarlo, perdón por eso también.

Ahora, agrego una cosita mas a ver si se puede hacer...

Quiero que de ese mismo resultado, me ponga primero los que empiezan con la misma letra que el parámetro de búsqueda (para hacerlo algo mas preciso).

Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Consulta ORDER BY

Publicado por Leonardo Josué (1173 intervenciones) el 30/11/2010 23:03:25
Lo que estás pidiendo se parece mucho a BÚSQUEDAS DE TEXTO COMPLETO. igual y deberías darle un vistazo a ese tema, en cuanto al otro criterio que mencionas, sería cuestión de que anides algunos CASE-WHEN, intenta hacerlo y si tienes problemas lo comentas en el foro y el día de mañana vemos como lo puedes resolver, la idea sería analizar los posibles casos que se pueden presentar:

->si el texto tiene la misma longitud de tu cadena de búsqueda y comienza con la misma letra entonces poner en primer lugar (asignar 1)
->Si el texto tiene la misma longitud de la cadena búsqueda pero no comienza con la misma letra entonces asignar un 2
->Si el texto no tiene la misma longitud, pero comienza con la misma letra, entonces colocar un 3
.......(Continuar si tienes más criterios)

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar