Foros del Web » Programando para Internet » PHP »

Actualizar o insertar datos Mysql desde .csv

Estas en el tema de Actualizar o insertar datos Mysql desde .csv en el foro de PHP en Foros del Web. Hola tengo un codigo que me inserta datos a una tabla pero no puedo filtarlo para que no me inserte en el caso de que ...
  #1 (permalink)  
Antiguo 23/05/2012, 13:38
 
Fecha de Ingreso: marzo-2012
Ubicación: Rosario
Mensajes: 108
Antigüedad: 12 años, 1 mes
Puntos: 0
Pregunta Actualizar o insertar datos Mysql desde .csv

Hola tengo un codigo que me inserta datos a una tabla pero no puedo filtarlo para que no me inserte en el caso de que ya exista, para evitar el duplicado de registros.

Aqui el codigo:
<?php
require("conex.php");
$row = 1;
$fp = fopen ("libro1.csv","r");
while ($data = fgetcsv ($fp, 1000, ";"))
{
$num = count ($data);
print " <br>";
$row++;
echo "$row- ".$data[0].$data[1].$data[2];

$insertar="INSERT INTO articulos (codigo,descripcion,precio) VALUES ('$data[0]','$data[1]','$data[2]')";


mysql_query($insertar);
}
fclose ($fp);
?>

Y lo otro es en el caso de que exista el registro, que actualice los precios
  #2 (permalink)  
Antiguo 23/05/2012, 13:52
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Actualizar o insertar datos Mysql desde .csv

cambia la linea de la insercion por estas 3:

$mq=mysql_query("SELECT codigo FROM articulos WHERE codigo='$data[0]';");
if(!mysql_fetch_row($mq)){
$insertar="INSERT INTO articulos (codigo,descripcion,precio) VALUES ('$data[0]','$data[1]','$data[2]')";
mysql_query($insertar);
}

Como verás lo que hice fue consultar si ya existe un registro con ese código, si no existe lo inserta, si existe no hace nada.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #3 (permalink)  
Antiguo 23/05/2012, 13:59
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Actualizar o insertar datos Mysql desde .csv

Otra opción, si el código del artículo no puede repetirse por ningún motivo, es poner el campo código como llave primaria, de esa forma no podría repetirse, o incluso podrías controlar, que en caso de existir, se actualice:

insert into tabla (codigo,descripcion,precio) values ('$data[0]','$data[1]','$data[2]') on duplicate key update (descripcion='$data[1]',precio='$data[2]')
  #4 (permalink)  
Antiguo 23/05/2012, 14:05
 
Fecha de Ingreso: marzo-2012
Ubicación: Rosario
Mensajes: 108
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Actualizar o insertar datos Mysql desde .csv

Cita:
Iniciado por stramin Ver Mensaje
cambia la linea de la insercion por estas 3:

$mq=mysql_query("SELECT codigo FROM articulos WHERE codigo='$data[0]';");
if(!mysql_fetch_row($mq)){
$insertar="INSERT INTO articulos (codigo,descripcion,precio) VALUES ('$data[0]','$data[1]','$data[2]')";
mysql_query($insertar);
}

Como verás lo que hice fue consultar si ya existe un registro con ese código, si no existe lo inserta, si existe no hace nada.
Excelente, muchisimas gracias, la ultima que quizas no viste para actualizar el registro como se puede hacer?
  #5 (permalink)  
Antiguo 23/05/2012, 14:36
 
Fecha de Ingreso: marzo-2012
Ubicación: Rosario
Mensajes: 108
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Actualizar o insertar datos Mysql desde .csv

Cita:
Iniciado por ocp001a Ver Mensaje
Otra opción, si el código del artículo no puede repetirse por ningún motivo, es poner el campo código como llave primaria, de esa forma no podría repetirse, o incluso podrías controlar, que en caso de existir, se actualice:

insert into tabla (codigo,descripcion,precio) values ('$data[0]','$data[1]','$data[2]') on duplicate key update (descripcion='$data[1]',precio='$data[2]')
Esta buena la idea, pasa que tengo un campo id como llave primaria (que utilizo sino lo cambiaria por el codigo directamente), y a la hora de subir el csv es un valor que no viene solo vienen los descriptos anteriormente, codigo, descripcion y precio
  #6 (permalink)  
Antiguo 23/05/2012, 17:12
 
Fecha de Ingreso: marzo-2012
Ubicación: Rosario
Mensajes: 108
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Actualizar o insertar datos Mysql desde .csv

Ideas para hacer el update? alguien
  #7 (permalink)  
Antiguo 23/05/2012, 17:18
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Actualizar o insertar datos Mysql desde .csv

Pues muy simple:
con un código similar al que te indicó stramin:

if(!mysql_num_rows("SELECT codigo FROM articulos WHERE codigo='$data[0]'")){
mysql_query("INSERT INTO articulos (codigo,descripcion,precio) VALUES ('$data[0]','$data[1]','$data[2]')");
}else{
mysql_query("update articulos set descripcion='$data[1]', precio='$data[2]' where codigo=$data[0]");
}
  #8 (permalink)  
Antiguo 23/05/2012, 17:36
 
Fecha de Ingreso: marzo-2012
Ubicación: Rosario
Mensajes: 108
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Actualizar o insertar datos Mysql desde .csv

Cita:
Iniciado por ocp001a Ver Mensaje
Pues muy simple:
con un código similar al que te indicó stramin:

if(!mysql_num_rows("SELECT codigo FROM articulos WHERE codigo='$data[0]'")){
mysql_query("INSERT INTO articulos (codigo,descripcion,precio) VALUES ('$data[0]','$data[1]','$data[2]')");
}else{
mysql_query("update articulos set descripcion='$data[1]', precio='$data[2]' where codigo=$data[0]");
}
Me pone lo siguiente por cada linea que quiero insertar o actualizar: Warning: mysql_num_rows(): supplied argument is not a valid MySQL

Esta bien el codigo asi?
<?php
require("conex.php");
$row = 1;
$fp = fopen ("libro1.csv","r");
while ($data = fgetcsv ($fp, 1000, ";"))
{
$num = count ($data);
print " <br>";
$row++;
echo "$row- ".$data[0].$data[1].$data[2];

if(!mysql_num_rows("SELECT codigo FROM articulos WHERE codigo='$data[0]'")){
mysql_query("INSERT INTO articulos (codigo,descripcion,precio) VALUES ('$data[0]','$data[1]','$data[2]')");
}else{
mysql_query("update articulos set precio='$data[2]' where codigo=$data[0]");
}
}

fclose ($fp);
?>
  #9 (permalink)  
Antiguo 23/05/2012, 17:49
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Actualizar o insertar datos Mysql desde .csv

Bueno, fallo mío, aunque deberías leer un poquito más sobre mysql para detectar el error.

if(!mysql_num_rows(mysql_query("SELECT codigo FROM articulos WHERE codigo='$data[0]'"))){
  #10 (permalink)  
Antiguo 23/05/2012, 18:01
 
Fecha de Ingreso: marzo-2012
Ubicación: Rosario
Mensajes: 108
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Actualizar o insertar datos Mysql desde .csv

Cita:
Iniciado por ocp001a Ver Mensaje
Bueno, fallo mío, aunque deberías leer un poquito más sobre mysql para detectar el error.

if(!mysql_num_rows(mysql_query("SELECT codigo FROM articulos WHERE codigo='$data[0]'"))){
Ahi funciona pero hay un error me actualiza los datos de de todos los registros con el precio del primero es como sino tomara el array
  #11 (permalink)  
Antiguo 23/05/2012, 18:09
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Actualizar o insertar datos Mysql desde .csv

where codigo=$data[0]

debe tener comillas simples (apostrofes)

where codigo='$data[0]'
  #12 (permalink)  
Antiguo 23/05/2012, 18:30
 
Fecha de Ingreso: marzo-2012
Ubicación: Rosario
Mensajes: 108
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Actualizar o insertar datos Mysql desde .csv

Cita:
Iniciado por ocp001a Ver Mensaje
where codigo=$data[0]

debe tener comillas simples (apostrofes)

where codigo='$data[0]'
Genio anda de primera.
Muchisimas gracias, la verdad que sin tu ayuda no lo podria haber logrado por dos motivos, primero sabiduria y segundo cansancio, hace mas d 14 horas que estoy sentado enfrente de la maquina estoy mueto no puedo ni pensar ya

Etiquetas: csv, mysql, registros
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 21:51.