Foros del Web » Programando para Internet » PHP »

Eliminar registros repetidos dejando solo 1

Estas en el tema de Eliminar registros repetidos dejando solo 1 en el foro de PHP en Foros del Web. Hola.. queria saber como puedo hacer para eliminar registros de una BD si estan repetidos.. pero dejando 1 en la base.. es decir.. eliminar los ...
  #1 (permalink)  
Antiguo 03/05/2006, 09:05
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
Eliminar registros repetidos dejando solo 1

Hola.. queria saber como puedo hacer para eliminar registros de una BD si estan repetidos.. pero dejando 1 en la base..

es decir.. eliminar los qeu estan repetidos..
__________________
ALOZORRO v5.0 (ahora en .es)
  #2 (permalink)  
Antiguo 03/05/2006, 09:20
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo

Pues no existe una funcion que diractamente te elimine los registros repetidos. Lo que tendrias que realizar

primero la busqueda con un select

segundo verificar con mysql_fetch_row si es ==1 esto con la finalidad de ir verificando que solo quede un elemento y en el momento de que sea uno ya no realizar ninguna eliminacion.

tercero usar la sentencia delete para ir borrando dicho registro
  #3 (permalink)  
Antiguo 03/05/2006, 13:29
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
Bueno.. yo algo asi habia pensado.. pero en el paso tercero que tu dices si uso el delete lo que hace es borrarme todos los registros que cumplan la condicion.. y yo lo que quiero es que me deje uno solo...

yo había pensado hacer esto:

primero: la busqueda

segundo: la verificacion y si es mayor que 1 hacer "tercero"

tercero: guardar lso datos ese registro repetido (email, usuario y posibles demas datos), borrar todos los que sean iguales y volver a insertarlo solo una vez..

pero nose.. no lo veo muy "optimizado".. era mas que nada por eso.. por si habia alguna manera mejor jeje..

gracias de todas formas..
__________________
ALOZORRO v5.0 (ahora en .es)
  #4 (permalink)  
Antiguo 03/05/2006, 14:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Se me ocurre algo tipo:

Suponiendo que tenemos un campo "ID" autonumérico y único que identifica nuestros registros .. OK? (esto es la "base" de mi argumento . .si no está no sirve leer más lo que voy a escribir).

Se trata de:
1) Contar el n° de ocurrencias del registro repetido:
SELECT COUNT(*) WHERE campo='$valor'

2) Borrar registros por ese criterio pero con "LIMIT" al total-1
DELETE FROM pruebas WHERE mombre='pedro' ORDER BY id LIMIT $total_menos_uno


Ordeno por el campo ID para quedarme con el "mayor" o el "menor" (según uses DESC o ASC ..) de la primera (o última) aparición de ese registro por cierto criterio repetido.

Lo hice con un prueba a mano y parece funcionar mi "teoría" ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 15/05/2006, 02:33
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
mmm parece interesante la idea esa del limit, tendré que probarlo para la proxima vez ..

una cosilla.. supongamos que tengo que eliminar los repetidos, pero no se nada de los datos que tengo en la base de datos, es decir, en el problema que tenia antes yo sabia por que valor tenia que borrar, tenia una lista de emails en un txt y a partir de ahi miraba en la base para cada email del fichero, si estaba repetido lo borraba, pero que pasaría si no se nada y simplemente tengo que borrar los repetidos??

si aplico lo que acaba de decir cluster funcionaría esto?:

DELETE FROM pruebas ORDER BY id LIMIT $total_menos_uno HAVING count(*)>1

es que estube buscando por ahi y me encontré esto del having, pero no sé si funcionará.. lo probé en la base y me sale un registro, pero no está repetido.. nosé si será asi...

ah.. y gracias por la ayuda clus
__________________
ALOZORRO v5.0 (ahora en .es)
  #6 (permalink)  
Antiguo 15/05/2006, 07:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Azrael666
mmm parece interesante la idea esa del limit, tendré que probarlo para la proxima vez ..

una cosilla.. supongamos que tengo que eliminar los repetidos, pero no se nada de los datos que tengo en la base de datos, es decir, en el problema que tenia antes yo sabia por que valor tenia que borrar, tenia una lista de emails en un txt y a partir de ahi miraba en la base para cada email del fichero, si estaba repetido lo borraba, pero que pasaría si no se nada y simplemente tengo que borrar los repetidos??

si aplico lo que acaba de decir cluster funcionaría esto?:

DELETE FROM pruebas ORDER BY id LIMIT $total_menos_uno HAVING count(*)>1

es que estube buscando por ahi y me encontré esto del having, pero no sé si funcionará.. lo probé en la base y me sale un registro, pero no está repetido.. nosé si será asi...

ah.. y gracias por la ayuda clus
Ahí no sé .. consulta en el foro de "Base de datos".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 15:23.