En el capitulo anterior de el manual de la clausula order by de MySQL aprendimos el uso basico del mismo ahora vayamos a lo mas avanzado y a lo mas interesante.
Entonces tenemos la tabla he hicimos algunas consultas con la clausual order by.
La tabla original
|
Programadores
|
|||
|
Nombre
|
Telefono
|
Color
|
ID
|
|
Douglas
|
44444548
|
verde
|
5
|
|
Brendan
|
23131542
|
gris
|
2
|
|
Dean
|
58964121
|
verde
|
3
|
|
Linus
|
59684211
|
azul
|
1
|
|
Jhon
|
14524695
|
azul
|
4
|
Y luego hicimos la siguiente ordenacion por ID de forma descendente
select * from Programadores order by ID desc
Hasta ahi hibamos bien ok ahora como si queremos que se ordene por colores haremos lo siguiente.
select * from Programadores order by Color asc
Obviamente la order es por orden alfabetico en la columna color y obtenemos lo siguiente.
| Nombre | Telefono | Color | ID |
|---|---|---|---|
| Linus | 59684211 | azul | 1 |
| Jhon | 14524695 | azul | 4 |
| Brendan | 23131542 | gris | 2 |
| Dean | 58964121 | verde | 3 |
| Douglas | 44444548 | verde | 5 |
Bien ahora que pasaria si quisieramos que tambien ordenara los telefonos el mas pequeño (111111) iria primero y el mas grande (9999999) iria despues, obviamente tambien se ordenarian los colores entonces la consulta seria de esta manera.
select * from Programadores order by Color asc, telefono asc
Lo cual nos arroja el siguiente resultado
| Nombre | Telefono | Color | ID |
|---|---|---|---|
| Jhon | 14524695 | azul | 4 |
| Linus | 59684211 | azul | 1 |
| Brendan | 23131542 | gris | 2 |
| Douglas | 44444548 | verde | 5 |
| Dean | 58964121 | verde | 3 |
Como pudimos ver podemos agregarle varios campos a ordenar en el ejemplo se trata de 5 registros sin embargo en tablas con varios cientos o miles de registros nos resultara muy util
Pero que pasaria si lo que deseo es que se ordenen por color y el primer color sea el verde, luego el azul y por ultimo el gris.
Si usamos esta consulta
select * from Programadores order by Color desc
Nos arrojara esto.
| Nombre | Telefono | Color | ID |
|---|---|---|---|
| Dean | 58964121 | verde | 3 |
| Douglas | 44444548 | verde | 5 |
| Brendan | 23131542 | gris | 2 |
| Linus | 59684211 | azul | 1 |
| Jhon | 14524695 | azul | 4 |
Y si la asecemos ASC (ascendente) estara exactanemte igual solo que al reves(pueden checarlo) de todos modos siempre permanecera el mismo orden, digamos alfabeticamente
a,b,c,d…,g,h,..v..z o al reves z,y,x,w,v…g,f…b,a
¿Entonces como le hago?
Pues esto fue lo que descubri ya que no se si se deba hacer asi o haya otra forma, de todos modos sirve.
Primero hay que indicarle que necesitamos el verde, luego el azul y ultimo el gris
el SQL seria
select * from Programadores order by
Color=”verde” desc, Color=”azul” desc , Color=”gris” desc
Uso desc para decirle que siempre el orden sera como los estoy anotando.
Con esta forma obtendremos lo que queriamos y sera asi.
| Nombre | Telefono | Color | ID |
|---|---|---|---|
| Dean | 58964121 | verde | 3 |
| Douglas | 44444548 | verde | 5 |
| Linus | 59684211 | azul | 1 |
| Jhon | 14524695 | azul | 4 |
| Brendan | 23131542 | gris | 2 |
Como pudieron observar el resultado fue satisfactorio, asi que ya saben si el orden es el problema primero cheken ajaxman.net a ver que hay.
Espero que este articulo les sea de mucha ayuda.
Nota prueben con muchos datos y veran que es muy util
Fin del manal de Order by
Related Photos
No related photos.





2 Responses
Muchas gracias carnal.. lo que andaba buscando =D
“select * from Programadores order by
Color=”verde” desc, Color=”azul” desc , Color=”gris” desc”
Lo que queres hacer es en realidad ->
“select * from Programadores order by FIELD
(‘Color’,'verde’,'azul’,'gris’)
E incluso si queres que primero esten los grises y los demas no te importan
“select * from Programadores order by FIELD
(‘Color’,'gris’).
Tarde pero seguro el comentario.
Te lo comento porque quize hacer eso que vos haces y no me dio resultado, en cambio con este que te pase si.
Saludos