Foros del Web » Programando para Internet » PHP »

Como encontrar registros duplicados en una base de datos

Estas en el tema de Como encontrar registros duplicados en una base de datos en el foro de PHP en Foros del Web. Buenas, Al pedir através de una sentencia php todos los nicks de una base de datos... Ej. $result=mysql_query("select nick from corporation_proyectos where pagado='no'"); desearia poder ...
  #1 (permalink)  
Antiguo 29/03/2007, 19:16
 
Fecha de Ingreso: diciembre-2003
Mensajes: 173
Antigüedad: 20 años, 4 meses
Puntos: 1
Como encontrar registros duplicados en una base de datos

Buenas,

Al pedir através de una sentencia php todos los nicks de una base de datos...

Ej. $result=mysql_query("select nick from corporation_proyectos where pagado='no'");

desearia poder comprobar si algun nick aparece repetido si es asi que solo borrara el registro con la fecha mas actual en caso contrario que borrara el registro unico.

Es un poco complejo verdad..

Haber si pudieran orientarme... gracias a todos.

Un saludo,
Section1
  #2 (permalink)  
Antiguo 29/03/2007, 19:36
 
Fecha de Ingreso: diciembre-2003
Mensajes: 173
Antigüedad: 20 años, 4 meses
Puntos: 1
Re: Como encontrar registros duplicados en una base de datos

<?
//Conexion con la base
mysql_connect("localhost","*****","****");
//selección de la base de datos con la que vamos a trabajar
mysql_select_db("servidor");
//Ejecutamos la sentencia SQL
$result=mysql_query("select * from corporation_proyectos where pagado='no'");
while ($row=mysql_fetch_array($result))
{

$fecha = $row["date"];
list ($dia, $mes, $anyo) = explode("/", $fecha);
$timestamp = mktime(0, 0, 0, $mes, $dia, $anyo) + 172800;
if (time() > $timestamp) {
En el codigo anterior le ordeno que extraiga un listado de registros con las condiciones pagado=no i date= a mas de 48 horas respecto a la fecha actual.
Aqui es donde tendria que comprobar si hay dos registros con el mismo nick. Si es que si debe borrar el registro mas actual.
}

}
mysql_free_result($result)


$result=mysql_query("select nick from corporation_pagos where nick='$result'");
//Creamos la sentencia SQL y la ejecutamos
$sSQL="Delete From Clientes Where nombre='$row["nick"]'";
mysql_query($sSQL);

?>
  #3 (permalink)  
Antiguo 29/03/2007, 20:02
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Re: Como encontrar registros duplicados en una base de datos

No entiendo...

Si hay repetidos, que borre el mas reciente

Si no hay repetidos, que lo borre?

Es decir, tu tabla se va a quedar SOLO con los registros que hayan tenido repetidos, y va a borrar todos los registros individuales y todos los repetidos recientes?

Lista Original:
manolo|20/01/2007
carlos|25/02/2007
errnesto|12/03/2007
manolo|15/03/2007

Lista resultante:
manolo|20/01/2007




Es eso lo que quieres??
__________________
Manoloweb
  #4 (permalink)  
Antiguo 29/03/2007, 20:08
 
Fecha de Ingreso: diciembre-2003
Mensajes: 173
Antigüedad: 20 años, 4 meses
Puntos: 1
Re: Como encontrar registros duplicados en una base de datos

Si eso es lo que me refiero.

Un saludo,
Section1
  #5 (permalink)  
Antiguo 29/03/2007, 20:32
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Re: Como encontrar registros duplicados en una base de datos

Pues mira, haciendo unas pequeñas pruebitas logré sacar dos queries, uno que te regresa todos los registros que debes conservar, y el segundo todos los que debes borrar despues de ese primero...

La tabla que usé es esta:
Código:
CREATE TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  `nombre` varchar(50) default NULL,
  `fecha` timestamp NOT NULL default CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
Y los queries son estos:

a) Conservar los registros con estos ID: o sea, correr un delete from test where id not in({aqui pegas el resultado de este query como cadena separada por comas})
Código:
select distinct a.id from test a left join test b on (a.nombre=b.nombre and a.id!=b.id and a.id<b.id) where b.id is not null


b) Despues corres otro delete de los id's que resulten de este segundo query...
Código:
select distinct b.id from test a left join test b on (a.nombre=b.nombre and a.id!=b.id and a.id<b.id) where b.id is not null
Tal vez se ve medio complejo, pero es simple, con dos queries consigues tu resultado, y no saturas de funcionalidad a PHP, le dejas casi todo a la BD...

Saludos!
__________________
Manoloweb
  #6 (permalink)  
Antiguo 02/04/2007, 12:41
 
Fecha de Ingreso: diciembre-2003
Mensajes: 173
Antigüedad: 20 años, 4 meses
Puntos: 1
Re: Como encontrar registros duplicados en una base de datos

Hola

Pues si un pelin complicado porque no entiendo como quedaria el codigo que llamaria a los query.

Ej.
<?php
select distinct a.id from test a left join test b on (a.nombre=b.nombre and a.id!=b.id and a.id<b.id) where b.id is not null

delete from test where id not in({como seria el resultado})

?>

No se desconozco como funciona el resultado de un query o como deberia reflejarlo para solicitar la ejecucion del codigo desde php?¿?¿

Tambien otra cosa que no entiendo del codigo query que reflejas es.. donde hace la comparacion de fechas?

Si pudieras explicarmelo Manoloweb.

Gracias y un saludo

Última edición por Section1; 09/04/2007 a las 15:25
  #7 (permalink)  
Antiguo 14/04/2007, 15:45
 
Fecha de Ingreso: diciembre-2003
Mensajes: 173
Antigüedad: 20 años, 4 meses
Puntos: 1
Re: Como encontrar registros duplicados en una base de datos

Alguien podria orientarme de como quedaria el codigo final porfavor..
Que tal como me lo has indicado Manolo no me acabo de aclarar.

Un saludo
Section1
  #8 (permalink)  
Antiguo 14/04/2007, 17:45
 
Fecha de Ingreso: diciembre-2003
Mensajes: 173
Antigüedad: 20 años, 4 meses
Puntos: 1
Re: Como encontrar registros duplicados en una base de datos

He desarrollado un codigo que creo que sera el correcto.

Corregirme porfavor.

Un saludo,
Section1


Codigo
<?php

//Conexion con la base
mysql_connect("localhost","*****","****");
//selección de la base de datos con la que vamos a trabajar
mysql_select_db("servidor");
//Ejecutamos la sentencia SQL

mysql_query("select distinct a.id from test a left join test b on (a.nombre=b.nombre and a.id!=b.id and a.id<b.id) where b.id is not null");

mysql_query("select distinct b.id from test a left join test b on (a.nombre=b.nombre and a.id!=b.id and a.id<b.id) where b.id is not null");

?>
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 16:00.