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

Eliminar todo menos 10 registros recientes

Estas en el tema de Eliminar todo menos 10 registros recientes en el foro de Bases de Datos General en Foros del Web. Hola gente necesito una consulta para eliminar todos los registros de una tabla , menos los 10 registros mas recientes. no quiero recurrir a ningun ...
  #1 (permalink)  
Antiguo 03/03/2010, 12:50
 
Fecha de Ingreso: octubre-2004
Ubicación: Uruguay
Mensajes: 386
Antigüedad: 19 años, 6 meses
Puntos: 4
Eliminar todo menos 10 registros recientes

Hola gente
necesito una consulta para eliminar todos los registros de una tabla , menos los 10 registros mas recientes.


no quiero recurrir a ningun bucle en php es por ello que lo posteo aqui para encontrar la ayuda de alguien




PD: en caso de que la tabla tenga menos de 10 registros mantener dichos registros sin hacer borrado de nada.



Bueno desde ya muchas gracias a quien pueda ayudarme.
  #2 (permalink)  
Antiguo 03/03/2010, 12:53
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Eliminar todo menos 10 registros recientes

Haz una consulta ordenada por el campo fecha que tengas ordenado de mayor a menor y al final un LIMIT 11,1 . Eso te tomara el registro 11º, y luego haces un DELETE donde la condicion sea que la fecha sea <= que la fecha de ese registro

¿usas mysql?
  #3 (permalink)  
Antiguo 03/03/2010, 12:54
 
Fecha de Ingreso: octubre-2004
Ubicación: Uruguay
Mensajes: 386
Antigüedad: 19 años, 6 meses
Puntos: 4
Respuesta: Eliminar todo menos 10 registros recientes

muchas gracias por la respuesta. pero esperaba un ejemplo practico por que es una consulta anidada y la verdad que no me llevo bien con eso.
  #4 (permalink)  
Antiguo 03/03/2010, 12:56
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Eliminar todo menos 10 registros recientes

Ah, que no tienes mucha idea ..... pues ejemplo no se, ¿no tienes NADA hecho?
  #5 (permalink)  
Antiguo 03/03/2010, 13:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Eliminar todo menos 10 registros recientes

Cita:
Iniciado por gerazmv Ver Mensaje
muchas gracias por la respuesta. pero esperaba un ejemplo practico por que es una consulta anidada y la verdad que no me llevo bien con eso.
Perfecto, pero esto:
Cita:
necesito una consulta para eliminar todos los registros de una tabla , menos los 10 registros mas recientes.
no nos dice nada acerca de la tabla que hay que borrar, por lo que no hay forma de establecer cuál es la mejor consulta para determinar cuáles son los registros a conservar.

A menos que nos postees la estructura de la tabla y/o algo que nos sirva apra saber cómo determinas la secuencia histórica de entrada de datos, no es posible darte ninguna sugerencia...

Espero que te hayas acordado de poner uno o más campos que nos sirvan para eso, o de lo contrario no habrá forma de hacerlo. No te olvides que en un DBMS de este tipo los registros no se ordenan en la tabla por secuencia de entrada, a menos que la PK sea autonumérica...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 04/03/2010, 04:59
 
Fecha de Ingreso: octubre-2004
Ubicación: Uruguay
Mensajes: 386
Antigüedad: 19 años, 6 meses
Puntos: 4
Respuesta: Eliminar todo menos 10 registros recientes

okas un ejemplo podria ser el siguiente de la tabla logs solo quiero mantener guardados los ultimos 10 registros en caso de tener mas de 10 .
de lo contrario si tiene menos de 10 registros mantener registros .

tabla LOG:
idlog
16
35
93
83
12
47
56
85
24
85
37
45
67
69
55
23
44
55
  #7 (permalink)  
Antiguo 04/03/2010, 05:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Eliminar todo menos 10 registros recientes

Me parece que no has entendido algo:
El orden de almacenamiento no nos dice nada respecto al orden temporal de entrada, porque el primero no se construye por el orden temporal de entrada, sino por la clave primaria (PK) en la tabla. Solamente serviría si la PK fuese autonumérica, o bien estuviese definida en un DATETIME.
En el caso de muestra que pones, no hay forma de saber cuál es la PK ni si existe algun campo tal que nos permita saber cuál fue el orden de entrada. Obviamente no es una PK lo que estás poniendo, porque sino los números estarían ordenados.
Entonces:
Postea la sentencia de creación de la tabla, es lo único que nos serviría de guía para poder ver si es posible hacer una sentencia que haga lo que deseas.
O sea, postea la sentencia CREATE TABLE tabla(....
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 04/03/2010, 12:18
 
Fecha de Ingreso: octubre-2004
Ubicación: Uruguay
Mensajes: 386
Antigüedad: 19 años, 6 meses
Puntos: 4
Respuesta: Eliminar todo menos 10 registros recientes

CREATE TABLE IF NOT EXISTS `tester` (
`idstats` int(2) NOT NULL auto_increment,
`20` int(2) NOT NULL,
PRIMARY KEY (`idstats`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=1 ;
  #9 (permalink)  
Antiguo 04/03/2010, 12:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Eliminar todo menos 10 registros recientes

Suponiendo que esa tabla sea una tabla real, no hay forma de hacer lo que pides sin hacer al menos dos consultas, ya que hay que recuperar el punto desde el cual los registros sean válidos:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `tester` (
  2. `idstats` int(2) NOT NULL auto_increment,
  3. `20` int(2) NOT NULL,
  4. PRIMARY KEY (`idstats`)
  5. ) ENGINE=MyISAM DEFAULT
  6. CHARSET=latin1 COLLATE=latin1_spanish_ci
  7.  
  8. INSERT INTO tester(`20`)
  9. VALUES (16), (35), (93), (83), (12), (47), (56), (85), (24), (85), (37), (45), (67), (69), (55), (23), (44), (55);
  10.  
  11. SELECT MIN(idstats) ID INTO @A
  12.   (SELECT idstats, `20`
  13.   FROM tester t
  14.   ORDER BY idstats DESC
  15.   LIMIT 10) T;
  16.  
  17. DELETE FROM tester
  18. WHERE idstats<@A;

Estoy en este caso usando una variable de usuario que tiene vigencia durante una misma conexión.
Mi sugerencia sería usar stored procedures para implementar esto. De esa forma sólo harías una llamada.

Si la PK fuese otra, de todos modos podría servir, si la misma establece una secuencia cronológica de entrada.

Tip final: No uses números como nombres de columna. Eventualmente tendras errores de sintaxis si te olvidas los "`".
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: eliminar, menos, registros, todo
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 17:30.