Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

ordenar dos tablas por dos campos al mismo tiempo

Estas en el tema de ordenar dos tablas por dos campos al mismo tiempo en el foro de Mysql en Foros del Web. hola, me gustaria saber, si algun experto puede guiarme si es factible ordenar dos tablas por dos campos al mismo tiempo. Clairfico la idea: tengo ...
  #1 (permalink)  
Antiguo 11/01/2012, 18:44
 
Fecha de Ingreso: diciembre-2002
Mensajes: 473
Antigüedad: 21 años, 4 meses
Puntos: 0
ordenar dos tablas por dos campos al mismo tiempo

hola, me gustaria saber, si algun experto puede guiarme si es factible ordenar dos tablas por dos campos al mismo tiempo.
Clairfico la idea: tengo que ordenar por

-un campo de ranking, llamesmolo 1 que se completa por un servicio cron en forma automatica por una formula

y tambien tengo un campo de ranking 2 que puede cargarse a mano y en ese caso, deberia saltear el ranking 1 .

asi pues si el usuario pepe tiene ranking1 = 5.00 y ranking 2 :0, iria despues del usuario juan que tiene ranking 1 = 0.00 y ranking 2 : 7.00 .

no se si es entendible la idea y es factible hacer algo asi pero agradeceria vuestras ideas

Saludos!!
  #2 (permalink)  
Antiguo 11/01/2012, 22:25
 
Fecha de Ingreso: abril-2008
Ubicación: Santa Fe, Argentina
Mensajes: 41
Antigüedad: 16 años
Puntos: 14
Respuesta: ordenar dos tablas por dos campos al mismo tiempo

Teniendo nuestra tabla creada:

Código MySQL:
Ver original
  1. mysql> DESCRIBE rankings;
  2. +-------------+--------------+------+-----+---------+-------+
  3. | Field       | Type         | Null | Key | Default | Extra |
  4. +-------------+--------------+------+-----+---------+-------+
  5. | usuario     | varchar(20)  | NO   |     | NULL    |       |
  6. | rank_cron   | decimal(4,2) | YES  |     | 0.00    |       |
  7. | rank_manual | decimal(4,2) | YES  |     | 0.00    |       |
  8. +-------------+--------------+------+-----+---------+-------+
  9. 3 rows in set

Procedemos a insertar nuestros valores de prueba.

Código MySQL:
Ver original
  1. mysql> INSERT INTO rankings (usuario, rank_cron) VALUES ('pepe', 5.00);
  2. Query OK, 1 row affected
  3.  
  4.  
  5. mysql> INSERT INTO rankings (usuario, rank_manual) VALUES ('juan', 7.00);
  6. Query OK, 1 row affected
  7.  
  8.  
  9. mysql> SELECT * FROM rankings;
  10. +---------+-----------+-------------+
  11. | usuario | rank_cron | rank_manual |
  12. +---------+-----------+-------------+
  13. | pepe    |      5.00 |        0.00 |
  14. | juan    |      0.00 |        7.00 |
  15. +---------+-----------+-------------+
  16. 2 rows in set

Lo primero que debemos hacer, es que los usuarios queden ordenados por rank_manual, de mayor a menor (en forma descendiente).

Código MySQL:
Ver original
  1. mysql> SELECT * FROM rankings ORDER BY rank_manual DESC;
  2. +---------+-----------+-------------+
  3. | usuario | rank_cron | rank_manual |
  4. +---------+-----------+-------------+
  5. | juan    |      0.00 |        7.00 |
  6. | pepe    |      5.00 |        0.00 |
  7. +---------+-----------+-------------+
  8. 2 rows in set

Me imagino que sería deseable que en caso de que rank_manual fuese igual para dos usuarios, se ordenen también en forma descendiente por rank_cron. Insertamos entonces 2 valores más de prueba.

Código MySQL:
Ver original
  1. mysql> INSERT INTO rankings (usuario, rank_cron) VALUES ('hernan', 9.00);
  2. Query OK, 1 row affected
  3.  
  4.  
  5. mysql> INSERT INTO rankings (usuario, rank_cron, rank_manual) VALUES ('esteban',3.00, 7.00);
  6. Query OK, 1 row affected
  7.  
  8.  
  9. mysql> SELECT * FROM rankings;
  10. +---------+-----------+-------------+
  11. | usuario | rank_cron | rank_manual |
  12. +---------+-----------+-------------+
  13. | pepe    |      5.00 |        0.00 |
  14. | juan    |      0.00 |        7.00 |
  15. | hernan  |      9.00 |        0.00 |
  16. | esteban |      3.00 |        7.00 |
  17. +---------+-----------+-------------+
  18. 4 rows in set

Lo lógico sería que quede ordenado en la siguente forma: esteban, juan, hernan, pepe. Esto significa que estamos ordenando por rank_manual en forma descendiente primero, y luego también por rank_cron en forma descendiente.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM rankings ORDER BY rank_manual DESC, rank_cron DESC;
  2. +---------+-----------+-------------+
  3. | usuario | rank_cron | rank_manual |
  4. +---------+-----------+-------------+
  5. | esteban |      3.00 |        7.00 |
  6. | juan    |      0.00 |        7.00 |
  7. | hernan  |      9.00 |        0.00 |
  8. | pepe    |      5.00 |        0.00 |
  9. +---------+-----------+-------------+
  10. 4 rows in set

Última edición por Henkka; 11/01/2012 a las 22:26 Razón: "Insertamos entonces 3 valores más de prueba." -> "Insertamos entonces 2 valores más de prueba."
  #3 (permalink)  
Antiguo 12/01/2012, 11:58
 
Fecha de Ingreso: diciembre-2002
Mensajes: 473
Antigüedad: 21 años, 4 meses
Puntos: 0
Respuesta: ordenar dos tablas por dos campos al mismo tiempo

Que puedo decir Henkka? Sin palabaras, aun no lo probe pero me parece cierra todo. Mil millones de gracias por las molestias y el trabajo increible que te tomaste, de verdad lo aprecio muchisimo, eres un experto pero por sobre todo una gran persona.

Etiquetas: campos, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:30.