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