MySQL - Comando REPLACE

 
Vista:

Comando REPLACE

Publicado por Gustavo (5 intervenciones) el 20/04/2012 10:22:25
Mi prblema es el siguiente:

Instale Xampp con MySql e hice dos modulos, uno de exportacion y otrp de importacion, el de exportacion funciona correctamente pero al utilizar el de importacion me da el siguiente error:

"No se puieden introducir registros con Primary Key (PK) repetida" y me los mete con una PK contigua a los anteriores, es decir ,me repite los registros con otras PK.

Probe con REPLACE, pero me sigue haciendo lo mismo.

Pongo un ejemplo para aclarar.



Tengo una tabla con 4 productos, la PK es id_producto y tienen por valor 1, 2, 3 y 4, exporto, todo correcto y a la hora de importar mete los mismos 4 productos repetidos con id_producto 5, 6, 7 y 8.
Los borro y lo intento de nuevo y los mete con id_producto 9, 10, 11 y 12.

Que puede resolver mi problema?

Muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Resetear auto_increment

Publicado por xve (1151 intervenciones) el 20/04/2012 14:50:47
Hola Gustavo, tienes dos posibilidades....

1.- Eliminas y vuelves a crear la tabla
2.- Reinicializas el indice de esta manera:
1
ALTER TABLE `TuTabla` AUTO_INCREMENT=1

Recuerda que tienes que haber eliminado todos los registros...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Resetear auto_increment

Publicado por xve (1151 intervenciones) el 20/04/2012 14:55:27
Se me ha olvidado comentar, que hay otra manera de hacerlo, y es con la instrucción:
1
TRUNCATE `TuTabla`

Con esta instrucción, elimina todo el contenido de tu tabla y resetea el valor del auto_increment.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Resetear auto_increment

Publicado por Gustavo (5 intervenciones) el 22/04/2012 23:35:06
Muchas gracias por lo comentado, probare ambas cosas y de la que funcione y con mejor resultado con esa me quedare.
Muchas gracias a ambos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Resetear auto_increment

Publicado por Gustavo (5 intervenciones) el 23/04/2012 09:42:11
Perdona por la empanada mental, queria decir que gracias por las 2 respuestas, casi me llama mas la atencion la de truncate. Lo voy a probar ahora mismo.
Gracias, a ver si funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Resetear auto_increment

Publicado por Gustavo (5 intervenciones) el 23/04/2012 11:26:54
Pues no me funciona ninguno de los dos casos, mejora algo pero nada, no hay manera de que deje de meterlos repetidos.

ESTE ES MI CODIGO:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?
	$servidor="localhost";  //Aqui ponemos la maquina donde tenemos la base de datos. (Tambien vale IP)
	$usuario="root";		//Aqui ponemos un usuario con derechos de administración.
	$password="";			//Contraseña del usuario anterior. (Dejar vacio si no hay contraseña)
	$basedatos="prestashop";//Nombre de la base de datos donde se encuentra nuestra tabla
	$conexion=mysql_connect($servidor,$usuario,$password) or die ("Error de conexion.");
	mysql_select_db($basedatos,$conexion);
	//$a=mysql_query ("SELECT * FROM ps_product;",$conexion);
	$fichero="datos.txt";
	$contenido=file($fichero);
	for($i=0; $i<sizeof($contenido); $i++)
	{
	$linea=trim($contenido[$i]);
	$array=explode(";",$linea);
	$borrar="TRUNCATE product";
	//REPLACE por INSERT para que no duplique registros con la misma primary key
	$accion="REPLACE INTO product (id_product,id_supplier,id_manufacturer,
			 on_sale,online_only,ean13,quantity,price,active) VALUES ('$array[1]','$array[2]',
			 '$array[3]','$array[4]','$array[5]','$array[6]','$array[7]','$array[8]','$array[9]')";
	/*mysql_query($borrar);*/
	mysql_query($accion);
	//echo $a."<br>\n";
	if(mysql_error())
		{
		echo mysql_error() ."<br>\n";
		}
	}
 
	mysql_close($conexion)
	?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Resetear auto_increment

Publicado por xve (1151 intervenciones) el 23/04/2012 13:22:44
Hola Gustavo, en teoría, si es una clave primaria, no se pueden repetir lo valores... mysql no lo permite.

Nos puedes mostrar la estructura de la tabla:
1
describe product;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Resetear auto_increment

Publicado por Gustavo (5 intervenciones) el 24/04/2012 10:02:56
XVE, gracias por todo, si funciono con el REPLACE, lo que pasa que la base de datos que se crea al usar Prestashop es un poco delicada, probe con una base totalmente nueva y tablas propias y funciona perfecto.

Ahora el problema que tengo es que al importar del fichero, la primera columna se la salta, es decir, recorre el fichero linea por linea y el primer valos de cada linea no o registra.
Para arreglarlo he tenido que meter un primer registro vacio para que lo haga correctamente, es una chapucilla pero funciona, si tienes idea de por qué puede ser me vendria genial.

EL fichero que no me funciona:
1;200;25;20;
2;300;20;10;
3;350;25;15;
4;400;30;25;

El fichero que si funciona:
;1;200;25;20;
;2;300;20;10;
;3;350;25;15;
;4;400;30;25;

¿Por qué es necesario ese primer caracter vacio?

De todas formas gracias por la ayuda, si esto no lo saco tampoco pasa nada.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar