Load CSV file in MySQL

1

Hi, hoping you can help me.

I'm trying to load a csv file which the _pt_part_ should separate into 3 parts

  

EJ. Full character is 12345678910250L

     

I have to separate it into 3 fields:

     

| 123456789 | 102 | 50L |

I can now load it but I have not been able to separate the characters

<?php
    # conectare la base de datos
    $con=@mysqli_connect("localhost", "root", "", "cargamasiva");
    if(!$con){
        die("imposible conectarse: ".mysqli_error($con));
    }
    if (@mysqli_connect_errno()) {
        die("Connect failed: ".mysqli_connect_errno()." : ". mysqli_connect_error());
    }

    $productos = fopen ("/var/www/html/xxxxxx/p/pt_mstr.csv", "r" );//leo el archivo que contiene los datos del producto
        //Leo linea por linea del archivo hasta un maximo de 1000 caracteres por linea leida usando coma(,) como delimitador
        while (($datos = fgetcsv($productos,10000,";")) !== FALSE )
        {
            $linea[]=array('pt_part'=>$datos[0],'pt_draw'=>$datos[1],'pt_promo'=>$datos[2],'pt_desc1'=>$datos[3],'pt_rev'=>$datos[4]);//Arreglo Bidimensional para guardar los datos de cada linea leida del archivo
         /*$linea[]=array('pt_proveedor'=>$datos[0],'pt_pi'=>$datos[1],'pt_part'=>$datos[2],'pt_draw'=>$datos[3],'pt_promo'=>$datos[4],'pt_desc1'=>$datos[5],'pt_rev'=>$datos[6]);//Arreglo Bidimensional para guardar los datos de cada linea leida del archivo*/
        }
    fclose ($productos);//Cierra el archivo

    $ingresado=0;//Variable que almacenara los insert exitosos
    $error=0;//Variable que almacenara los errores en almacenamiento
    $duplicado=0;//Variable que almacenara los registros duplicados
    $actualizado=0;//Variable que almacenara los registros duplicados


    foreach($linea as $indice=>$value) //Iteracion el array para extraer cada uno de los valores almacenados en cada items
    {   
        //$pt_proveedor=$value["pt_proveedor"];// proveedor
        //$pt_pi=$value["pt_pi"]; //pi = producto importado
        $pt_part=$value["pt_part"];//pt_part = articulo
        $pt_draw=$value["pt_draw"];//pt_draw = familia
        $pt_promo=$value["pt_promo"];//pt_promo = temporada de venta
        $pt_desc1=$value["pt_desc1"];//pt_desc1 = descripcion
        $pt_rev=$value["pt_rev"];//pt_rev = Marca

        $sql=mysqli_query($con,"select * from productos where pt_part='$pt_part'");//Consulta a la tabla productos
        $num=mysqli_num_rows($sql);//Cuenta el numero de registros devueltos por la consulta
        if ($num==0)//Si es == 0 inserto
            {
if ($insert=mysqli_query($con,"insert into productos (pt_part, pt_draw, pt_promo, pt_desc1, pt_rev) values('$pt_part','$pt_draw','$pt_promo','$pt_desc1','$pt_rev')"))

            /*if ($insert=mysqli_query($con,"insert into productos (pt_proveedor, pt_pi, pt_part, pt_draw, pt_promo, pt_desc1, pt_rev) values('$pt_proveedor','$pt_pi','$pt_part','$pt_draw','$pt_promo','$pt_desc1','$pt_rev')"))*/
                $ingresado+=1;

            }
        else 
            {
                if ($update=mysqli_query($con,"UPDATE productos SET pt_draw='$pt_draw', pt_promo='$pt_promo', pt_desc1='$pt_desc1', pt_rev='$pt_rev' WHERE pt_part='$pt_part'"))

                /*if ($update=mysqli_query($con,"UPDATE productos SET pt_proveedor='$pt_proveedor', pt_pi='$pt_pi', pt_draw='$pt_draw', pt_promo='$pt_promo', pt_desc1='$pt_desc1', pt_rev='$pt_rev' WHERE pt_part='$pt_part'"))*/
                $actualizado+=1;


            }

    }
    
asked by Francisco 15.02.2017 в 18:12
source

2 answers

0

To separate it you can use the function substr($string, $start, $length) . It would be something like this:

$caracter_completo = 12345678910250L;
$parte1 = substr($caracter_completo, 0, 9);//empieza desde el cero, 9 caracteres de longitud
$parte2 = substr($caracter_completo, 9, 3);
$parte3 = substr($caracter_completo, 12, 3);

What it does is pass the complete code to be separated, the second parameter is the character where it starts and the third parameter is the number of characters that it will include.

    
answered by 15.02.2017 / 18:58
source
0

If it's an occasional load you can try this website: link

From a csv file it detects data types and returns a mysql script that creates and populates the table.

    
answered by 04.05.2017 в 01:14