Subida de datos muy lenta
Publicado por Lorenzo (1 intervención) el 28/10/2019 17:02:17
Hola a todos, veréis tengo un problema con un script que estoy haciendo para mi empresa. Necesito abrir un archivo csv, leer x columnas y subirlas a la base de datos. El problema que tengo es que hace varias comprobaciones en los campos y esto ralentiza mucho la subida de información de hecho puede llegar a tardar hasta 3 horas para subir 47000 registros y eso no es viable. ¿Como puedo solucionar esto? Aquí os dejo el código para que le echéis un vistazo. Gracias de ante mano.
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
if($columna[13] == 'csv'){
while ($datos = fgetcsv($archivo, 0, ";")){
$linea++;
//Si la línea leída es igual o superior
if ($linea >= $columna[2]) {
//Compruebo si son numéricos
if (preg_match('/[[:alpha:]]/i', str_replace(chr(0), '', $datos[$columna[3]])) == false) {
//Si contienen datos
if (str_replace(chr(0), '', $datos[$columna[3]]) != null) {
//Si el EAN es igual o mayor a 11 entra
if(strlen(str_replace(chr(0), '', $datos[$columna[3]])) >= 11){
//Si la cadena es menor de 13 se añaden 0 a la izquierda
if (strlen(str_replace(chr(0), '', $datos[$columna[3]])) < 13 ) {
$EAN = str_pad(str_replace(chr(0), '', $datos[$columna[3]]), 13, '0', STR_PAD_LEFT);
}else{
$EAN = str_replace(chr(0), '', $datos[$columna[3]]);
}
if($columna[4] == null){
$Mod = "";
}else{
$Mod = utf8_decode(str_replace(chr(0), '', $datos[$columna[4]]));
}
if(str_replace(chr(0), '', $datos[$columna[5]]) >= 0){
(int)$Stock = str_replace(chr(0), '', $datos[$columna[5]]);
}else{
$Stock = 0;
}
$Des = utf8_decode(str_replace(chr(0), '', $datos[$columna[6]]));
if($columna[7] == null){
$Marca = "";
}else{
$Marca = str_replace(chr(0), '', $datos[$columna[7]]);
}
$Familia = utf8_decode(str_replace(chr(0), '', $datos[$columna[8]]));
if($columna[9] == null){
$Peso = 0;
}else{
(float)$Peso = str_replace(',', '.', str_replace(chr(0), '', $datos[$columna[9]]));
}
(float)$Precio = str_replace(',', '.', str_replace(chr(0), '', $datos[$columna[10]]));
if($columna[11] == null){
$Canon = 0;
}else{
(float)$Canon = str_replace(',', '.', str_replace(chr(0), '', $datos[$columna[11]]));
}
if($columna[12] == null){
if($Precio < 200){
$Portes = 5;
}else{
$Portes = 0;
}
}else{
(float)$Portes = str_replace(',', '.', str_replace(chr(0), '', $datos[$columna[12]]));
}
(float)$PrecioTotal = $Precio + $Canon;
$insertar = "INSERT into dbo.portal_csv_proveedores_mayoristas (Proveedor,EAN,Modelo, Stock,Descripcion,Marca,Familia,Peso,Precio,Canon,Portes,PrecioTotal) values ('$columna[0]','$EAN','$Mod',$Stock,'$Des','$Marca','$Familia',$Peso,$Precio,$Canon,$Portes,$PrecioTotal)";
$sql = sqlsrv_prepare($conn, $insertar);
sqlsrv_execute($sql);
}//Fin if ean igual o mayor a 11
}//Fin if null
}//Fin if excluir letras
}//Fin if linea 2
}//Fin while
}//Fin if
//Cerramos el archivo
fclose($archivo);
Valora esta pregunta


0