Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: dimitrix en 7 Enero 2016, 13:43 PM

Título: Eliminar todo menos 100 líneas
Publicado por: dimitrix en 7 Enero 2016, 13:43 PM
¡Hola amigos!

Os escribo para ver si me podéis ayudar a encontrar la query más limpia para el siguiente caso.

Tengo un listado de libros por categorías que se va actualizando, por ejemplo:



ID Category Título Time
--------------------------------------------------
1 nature amor de árbol 1456578945
2 nature pajas camperas 1456578946
3 nature El sol 1456578947
...
241 hackers Alex en la red 1456578948
242 hackers Peibol Gay 1456578949
243 hackers El binario 1456578950
...
571 love Yo y mi mano 1456579501
572 love Mu hetero 1456579502
573 love Love&Pajas 1456579503


Y necesito hacer una query que elimine todos menos los 100 últimos de cada categoría (pensar que el time es el timestamp de la hora que se ha añadido).

La gracia está en que se pudiera hacer en una sola query ¿Cómo lo haríais vosotros?
Título: Re: Eliminar todo menos 100 líneas
Publicado por: Shell Root en 7 Enero 2016, 13:49 PM
Se puede limitar el número de filas eliminadas mediante TOP, así que yo pensaría hacer una subconsulta que haga un COUNT() y de ahí restarle 100 y realizar el DELETE.

PD: No tengo SQL Server aqui en este equipo para realizar pruebas, pero eso se me ocurre.
Título: Re: Eliminar todo menos 100 líneas
Publicado por: dimitrix en 7 Enero 2016, 13:57 PM
Ahora mismo estoy usando MySQL, te agradecería a ver si luego puedes hechar un ojo pues no me sale en una sola query.

Creo que la gracia sería una query con una subquery con otra subquery, creo que esto se parece cada vez más a Origen (la película).

DELETE FROM libros WHERE ID IN (SELECT ID FROM LIBROS WHERE (SubQuery 2))
Título: Re: Eliminar todo menos 100 líneas
Publicado por: peib0l en 7 Enero 2016, 14:11 PM

Espero que esto te sirva:

DELETE FROM libros WHERE ID NOT IN (SELECT ID FROM LIBROS ORDER BY id DESC LIMIT 100 )
Título: Re: Eliminar todo menos 100 líneas
Publicado por: Shell Root en 7 Enero 2016, 14:20 PM
Mi 2da pelicula favorita después de Hombre en Llamas jajaja

Código (sql) [Seleccionar]
DELETE FROM table LIMIT ((SELECT COUNT(*) FROM table)-100)

Así lo pensaba yo