Ver Mensaje Individual
  #3 (permalink)  
Antiguo 08/02/2013, 11:46
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años, 2 meses
Puntos: 447
Respuesta: Dejar solo los 50 registros mas nuevos

Hola NSD:

Para eliminar los registros de un usuario en específico podrías intentarlo así, supongamos que tenemos estos datos:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla ORDER BY usuario, fecha DESC;
  2. +------+---------+---------------------+---------------------+
  3. | id   | usuario | fecha               | valor               |
  4. +------+---------+---------------------+---------------------+
  5. |    9 | dos     | 2013-01-11 11:37:05 |  0.7715120667326376 |
  6. |    6 | dos     | 2012-08-28 11:37:05 |  0.3587129659566218 |
  7. |   10 | dos     | 2012-06-26 11:37:05 |  0.7995527096088535 |
  8. |    3 | dos     | 2012-05-17 11:37:05 |  0.2546243381263915 |
  9. |    5 | dos     | 2012-03-16 11:37:05 |  0.6319321306719744 |
  10. |   11 | tres    | 2012-12-23 11:37:05 | 0.24789315857728306 |
  11. |    7 | tres    | 2012-09-01 11:37:05 | 0.12815745373084905 |
  12. |   12 | tres    | 2012-04-04 11:37:05 |  0.5139959030915013 |
  13. |    4 | uno     | 2013-01-11 11:37:05 |  0.6275553103792996 |
  14. |    2 | uno     | 2012-10-17 11:37:05 | 0.13447859895832706 |
  15. |    8 | uno     | 2012-10-15 11:37:05 | 0.20657520387934075 |
  16. |    1 | uno     | 2012-04-21 11:37:05 | 0.14449659096495862 |
  17. +------+---------+---------------------+---------------------+
  18. 12 rows in set (0.00 sec)

Ahora bien, supongamos que queremos dejar sólo los últimos tres registros para cada usuario... podrías hacerlo así:

Código MySQL:
Ver original
  1. mysql> DELETE T1.* FROM tabla T1,
  2.     -> ( SELECT * FROM tabla
  3.     ->   WHERE usuario = 'uno'
  4.     ->   ORDER BY usuario, fecha DESC LIMIT 3, 999) T2
  5.     -> WHERE T1.id = T2.id;
  6. Query OK, 1 row affected (0.05 sec)
  7.  
  8. mysql> DELETE T1.* FROM tabla T1,
  9.     -> ( SELECT * FROM tabla
  10.     ->   WHERE usuario = 'dos'
  11.     ->   ORDER BY usuario, fecha DESC LIMIT 3, 999) T2
  12.     -> WHERE T1.id = T2.id;
  13. Query OK, 2 rows affected (0.04 sec)
  14.  
  15. mysql> SELECT * FROM tabla ORDER BY usuario, fecha DESC;
  16. +------+---------+---------------------+---------------------+
  17. | id   | usuario | fecha               | valor               |
  18. +------+---------+---------------------+---------------------+
  19. |    9 | dos     | 2013-01-11 11:37:05 |  0.7715120667326376 |
  20. |    6 | dos     | 2012-08-28 11:37:05 |  0.3587129659566218 |
  21. |   10 | dos     | 2012-06-26 11:37:05 |  0.7995527096088535 |
  22. |   11 | tres    | 2012-12-23 11:37:05 | 0.24789315857728306 |
  23. |    7 | tres    | 2012-09-01 11:37:05 | 0.12815745373084905 |
  24. |   12 | tres    | 2012-04-04 11:37:05 |  0.5139959030915013 |
  25. |    4 | uno     | 2013-01-11 11:37:05 |  0.6275553103792996 |
  26. |    2 | uno     | 2012-10-17 11:37:05 | 0.13447859895832706 |
  27. |    8 | uno     | 2012-10-15 11:37:05 | 0.20657520387934075 |
  28. +------+---------+---------------------+---------------------+
  29. 9 rows in set (0.00 sec)

observa que en realidad lo que hago es obtener mediante una subconsulta los registros que se tienen que eliminar...

Código:
SELECT * FROM tabla
WHERE usuario = 'uno'
ORDER BY usuario, fecha DESC LIMIT 3, 999
el LIMIT 3, 999 indica que deberá traer los registros, a partir del cuarto registro, hasta un número los suficientemente grande (999) para traer todos los registros de este usuario.

Si encuentro alguna otra forma más sencilla de hacerlo la posteo después... Por lo pronto puedes comenzar a probar esto.

Saludos
Leo.