Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/01/2012, 22:25
Henkka
 
Fecha de Ingreso: abril-2008
Ubicación: Santa Fe, Argentina
Mensajes: 41
Antigüedad: 16 años, 1 mes
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."