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

Conocer los ID de las filas borradas con un UPDATE con condición random

Estas en el tema de Conocer los ID de las filas borradas con un UPDATE con condición random en el foro de Mysql en Foros del Web. Imaginad que hacemos un UPDATE tal que UPDATE tabla set valor='---' where floor(rand()*100)<50 ¿como haríais para saber que filas han sido modificadas concretamente si por ...
  #1 (permalink)  
Antiguo 12/12/2011, 09:33
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Pregunta Conocer los ID de las filas borradas con un UPDATE con condición random

Imaginad que hacemos un UPDATE tal que

UPDATE tabla set valor='---' where floor(rand()*100)<50

¿como haríais para saber que filas han sido modificadas concretamente si por ejemplo luego queremos hacer un listado?




Lo unico que se me ocurrió fue tener un campo extra que pongamos a 1 en el UPDATE:

UPDATE tabla set valor='---',modificado=1 where floor(rand()*100)<50

Sacamos la lista de los modificado=1

y luego

UPDATE tabla set modificado=0 where modificado=1

Pero imagino que habrá otra forma mejor de hacerlo...
  #2 (permalink)  
Antiguo 13/12/2011, 06:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Conocer los ID de las filas borradas con un UPDATE con condición random

Suponiendo que el update que propones funciona seria una forma de hacerlo...

...where floor(rand()*100)<50...

como no sabemos que debe ser igual a floor(rand()*100)<50... o menor a 50 ni cuantos vas a modificar....ni como Sql va a modificar nada...y quien te dice que floor(rand()*100) no te va a dar dos veces, o mas, el mismo valor...

Si suponemos que quieres modificar n registros seleccionados aleatoriamente y luego listarlos...

Primero genera la lista aleatoria de identificadores.
(no es facil, puesto que aleatoriamente puedes elegir identificadores que no existan en la tabla)

Segundo usala para hacer el UPDATE

Tercero usala para listar los registgros modificados

A ver si te sirve esto

CREATE TABLE tutablatemporal (id);

INSERT INTO tutablatemporal (id) SELECT id FROM tuTabla ORDER BY RAND() LIMIT n;

(donde n es el numero de registros que quieres modificar)

UPDATE tabla set valor='---' where id IN (SELECT id FROM tutablatemporal);

SELECT * FROM tutabla where id IN (SELECT id FROM tutablatemporal);

DROP tutablatemporal;

Parece trabajo para el servidor pero solo trabaja sobre n registros....apoyandose ademas en el indice de la PK.

Con evitar UPDATE tabla set modificado=0 where modificado=1 ya te has ahorrado un monton de trabajo del servidor...imaginate que tabla tiene n*1.000.000 de registros....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 13/12/2011 a las 07:28
  #3 (permalink)  
Antiguo 13/12/2011, 08:56
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Conocer los ID de las filas borradas con un UPDATE con condición random

Gracias quimfv, me ha servido tu ayuda, haré eso de una lista previa y trabajar con INSERTs o simplemente un bucle que la recorra una vez para la modificacion y otra vez para el listado.

Etiquetas: random, update
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 12:46.