Foros del Web » Programando para Internet » PHP »

insertar datos y saltarse las entradas duplicadas

Estas en el tema de insertar datos y saltarse las entradas duplicadas en el foro de PHP en Foros del Web. estoy insertando unos datos provenientes de un archivo .csv a mi bd, son uno 12.000 registros y hay algunas entradas duplicadas, la pregunta es, como ...
  #1 (permalink)  
Antiguo 12/07/2006, 16:13
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
insertar datos y saltarse las entradas duplicadas

estoy insertando unos datos provenientes de un archivo .csv a mi bd, son uno 12.000 registros y hay algunas entradas duplicadas, la pregunta es, como le puedo hacer para que cada vez que me salga una entrada duplicada la deseche y siga insertando las otras que no sean duplicadas?

mi script es el siguiente:

Código PHP:
<? 
    $dbh
=mysql_connect ("localhost""root""") or die ('I cannot connect to the database because: ' mysql_error()); 
    
mysql_select_db ("share_marketing"); 
       
    
$handle fopen ("bd.csv""r");       
    if (
$handle
    { 
        
$row explode("\n"fread($handlefilesize("bd.csv"))); 
    } 
     
$i 0
     while (
$i $row){ 
    foreach(
$row as $data
    {       
        
$data explode(";"$row[$i], 9); 

        echo 
'<table border="1">'
        echo 
'<tr>'
        
/*$sql = "INSERT INTO empresas (nombre,apellido1,apellido2,cargo,empresa,direccion,telefono,extension,ciudad)    VALUES (0"; 
        foreach($data as $field) 
        {       
            echo "<td><b>".$field."</b></td>"; 
            $sql .= ",'$field'"; 
        } 
        $sql .= ");";*/
        
        
$sql "INSERT INTO target (razon_social,contacto,cargo,email,direccion,telefono,ciudad,sector,website)    VALUES (";
        foreach(
$data as $field)
        {      
            echo 
"<td><b>".$field."</b></td>";
            
$sql .= "'$field',";
        }
        
$sql substr($sql0strlen($sql) - 1);  
//suponiendo que PHP te admita esa función, pero seguro que tiene 
//alguna parecida, ya que si no te quedaría una , al final de la instrucción
        
$sql .= ");";  
        
mysql_db_query ("share_marketing"$sql) or die (mysql_error()); 
        echo 
'</tr>'
        echo 
'</table>'
    
$i++; 
    } 
    } 
?>
la idea que tengo es crear un bucle que se repita y los inserte pero no se como hacerlo
__________________
Say no more.......
  #2 (permalink)  
Antiguo 12/07/2006, 16:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Duplicada .. con el dato que está ya en tu BBDD? es así?.

Si es eso .. deberías hacer una consulta SQL a tu BBDD antes de tu INSERT tipo:

SELECT * FROM tabla WHERE campo_que_indentifica_que_es_duplicado='dato'

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 12/07/2006, 16:34
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
no, la tabla esta vacia, estoy insertando todos los datos de una (no se puede hacer asi?)
__________________
Say no more.......
  #4 (permalink)  
Antiguo 12/07/2006, 16:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. se supone que en tu tabla destino de tu BBDD ahí deben quedar registros -no duplicados- por eso se trata de "consultar" esa tabla ..

(o quieres recorrer miles de veces tu csv en forma recursiva? .. )

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 12/07/2006, 16:46
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
si, pero lo que pasa es que al menos ahora solo me esta insertando el primer registro, y de alli me sale un aviso que dice entrada duplicada y no sigue insertando mas, lo que yo necesito es que me los siga insertando independiente de ese aviso
__________________
Say no more.......
  #6 (permalink)  
Antiguo 12/07/2006, 16:59
Avatar de elquique  
Fecha de Ingreso: marzo-2004
Ubicación: Florida, Uruguay
Mensajes: 2.495
Antigüedad: 13 años, 8 meses
Puntos: 78
La primera vez esta vacia ok, pero en la segunda vuelta y sigueintes ahi se justifica la consulta :)

Recorrer
Consultar
no esta Agrego
finRecorrer
__________________
Blog Jorge Oyhenard | Tutoriales Photoshop
  #7 (permalink)  
Antiguo 12/07/2006, 17:01
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
ok, entonces si entiendo lo que debo hacer es insertar la consulta en un while (o puede ser en el mismo)? o como quedaria??
__________________
Say no more.......
  #8 (permalink)  
Antiguo 12/07/2006, 17:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por el_cesar
si, pero lo que pasa es que al menos ahora solo me esta insertando el primer registro, y de alli me sale un aviso que dice entrada duplicada y no sigue insertando mas, lo que yo necesito es que me los siga insertando independiente de ese aviso
Cuando tengas reales problemas .. por favor indicalos!!! (menuda vuelta para llegar a eso).

Si tienes campos llave ..y pretendes INSERTar uno igual .. es normal que te dé ese problema.

Por eso te indico que debes consultar en ese bucle que inserta:

foreach($row as $data) {
// por aquí ...
}

ahí es donde debes hacer tu SELECT como te comenté y ver si tienes resultados (con mysql_mun_rows()) ..

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.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:25.