Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/10/2011, 12:24
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Ranking de parejas...

Por lo que se puede ver, no tienes mucha experiencia con el motor, por lo que te recomiendo que leas acerca de los TRIGGERS o Disparadores.

Estos se ejecutan antes o despues de insertar, actualizar o borrar los registros... por lo que te permite hacer validaciones o acciones adicionales.
Ahí podrías comparar que el usuario1 sea menor al usuario2, si no se cumple entonces intercambiarlos o marcar error, según tu lógica de negocio... sería más o menos así:

Código MySQL:
Ver original
  1. mysql> select * from parejas;
  2. +------+----------+----------+--------+
  3. | id   | usuario1 | usuario2 | puntos |
  4. +------+----------+----------+--------+
  5. |    1 |        1 |        2 |      1 |
  6. |    2 |        1 |        2 |      1 |
  7. +------+----------+----------+--------+
  8. 2 rows in set (0.09 sec)
  9.  
  10. mysql> #creamos el trigger o disparador
  11. mysql> DELIMITER $$
  12. mysql> CREATE TRIGGER parejas_chk BEFORE INSERT
  13.     ->     ON parejas
  14.     ->     FOR EACH ROW
  15.     ->     BEGIN
  16.     ->         DECLARE temp INT;
  17.     ->  IF NEW.usuario1 > NEW.usuario2 THEN
  18.     ->          SET temp = NEW.usuario1;
  19.     ->          SET NEW.usuario1 = NEW.usuario2;
  20.     ->          SET NEW.usuario2 = temp;
  21.     ->  END IF;
  22.     ->     END$$
  23. Query OK, 0 rows affected (0.10 sec)
  24.  
  25. mysql> DELIMITER ;
  26.  
  27. mysql> #insertamos un registro con los id's correctos
  28. mysql> insert into parejas values (3, 58, 71, 1);
  29. Query OK, 1 row affected (0.09 sec)
  30.  
  31. mysql> select * from parejas;
  32. +------+----------+----------+--------+
  33. | id   | usuario1 | usuario2 | puntos |
  34. +------+----------+----------+--------+
  35. |    1 |        1 |        2 |      1 |
  36. |    2 |        1 |        2 |      1 |
  37. |    3 |       58 |       71 |      1 |
  38. +------+----------+----------+--------+
  39. 3 rows in set (0.00 sec)
  40.  
  41. mysql> #insertamos un registro con los id's incorrectos;
  42. mysql> insert into parejas values (4, 71, 58, 1);
  43. Query OK, 1 row affected (0.17 sec)
  44.  
  45. mysql> select * from parejas;
  46. +------+----------+----------+--------+
  47. | id   | usuario1 | usuario2 | puntos |
  48. +------+----------+----------+--------+
  49. |    1 |        1 |        2 |      1 |
  50. |    2 |        1 |        2 |      1 |
  51. |    3 |       58 |       71 |      1 |
  52. |    4 |       58 |       71 |      1 |
  53. +------+----------+----------+--------+
  54. 4 rows in set (0.00 sec)

Observa que el registro 4, aunque se envían los id's de los usuarios al revés, el trigger los cambia, para dejar siempre el menor en primer lugar. Este tema es bastante amplio y te aseguro que te puede ser de mucha utilidad en el futuro, así es que tomate algún tiempo para investigar más y hacer algunos ejemplos (por ejemplo podrías validar que los puntos asignados estén entre un rango definido)

NOTA: el TRIGGER sólo se crea una vez, no hay necesidad de poner todo el código cada vez que ejecutas la consluta... lo hice así para demostrar el funcionamiento.

Saludos
Leo.