Foros del Web » Programando para Internet » PHP »

Complicada relacion de tablas al Importar archivo csv con php

Estas en el tema de Complicada relacion de tablas al Importar archivo csv con php en el foro de PHP en Foros del Web. Hola a todos! Estoy importando un archivo .csv con php a una tabla de mi base. La tabla tiene 4 columnas (el id_linea es un ...
  #1 (permalink)  
Antiguo 24/01/2012, 18:38
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Complicada relacion de tablas al Importar archivo csv con php

Hola a todos! Estoy importando un archivo .csv con php a una tabla de mi base. La tabla tiene 4 columnas (el id_linea es un autoincrement y no está afectado y la columna relacion no existe en el archivo .csv):

tabla LINEAS
Código:
id_linea | desc_linea | relacion | cod_linea
El código php que utilizo es este y funciona perfecto:
Código PHP:
$row 1;
$fp fopen ('productos.csv','r'); 
while (
$data fgetcsv ($fp1000";")) 

    
$num count ($data); 
    print 
" <br>"
    
$row++; 
    
    echo 
"$row- ".$data[4].$data[3];
     
    foreach (
$data as $pos=>$dato) { 
        
$data[$pos] = trim($dato);
    } 
  
    if (!
in_array($data[3],$ids)) {
       
   
$ids[] = $data[3];
   
$insertar="INSERT INTO lineas (desc_linea,cod_linea) VALUES ('$data[4]','$data[3]')"
    
mysql_query($insertar);
    }

fclose ($fp); 
Las columnas que importo desde el archivo csv son todas MENOS la columna RELACION.

La columna RELACION debería cargar el id_categoria de la tabla CATEGORIA. De esta manera funcionaría un buscador que armé con tablas relacionadas.

tabla CATEGORIA
Código:
id_categoria 	desc_categoria 	cod_categoria
1               Abrazaderas     ABR
2               Garef 	        GAR
3               Antenas 	ANT
La RELACION entre tablas funciona con la columna RELACION de la tabla LINEAS y el ID de la tabla CATEGORIAS

Y el resultado final debería quedar asi:

tabla LINEAS
Código:
id_linea | desc_linea         | relacion | cod_linea
1        | Banda Mini         | 1        | ABR01
2        | Banda Standard     | 1        | ABR02
3        | Banda Reforzada    | 1        | ABR03
4 	 | Reguladores  A     | 2        | GAR01
5 	 | Reguladores  B     | 2        | GAR02
6        | Antenas A          | 3        | ANT01
7        | Antenas B          | 3        | ANT02
.......
Por ahí, lo que se podría hacer es utilizar las letras de la columna cod_linea (tabla lineas) y compararlas con las 3 letras de cod_categoria (tabla categorias) ya que no existen 2 categorias iguales... y de ahí colocarle el id_categoria en la columna RELACION y así estaría completo... pero, ¿cómo hacerlo?

¿Alguna sugerencia de como colocar el valor correspondiente a la columna RELACION de la tabla LINEAS?

Perdon si está muy complicado pero traté de explicarlo lo mejor posible.

Saludos y mil gracias.
Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #2 (permalink)  
Antiguo 25/01/2012, 13:17
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: Complicada relacion de tablas al Importar archivo csv con php

Hola,

Es una buena idea (y, quizás, la única sin modificar los datos originales), usar el código del producto.

Esto solo si el cod_linea tiene siempre el mismo formato (CODCATEGORIA+NUMERO).

Si son muchos productos y no-tantas categorías, te recomiendo primero cargar todas las categorías en un array, algo como:
Código PHP:
$categorias=array();
$result=mysql_query("select * from categoria");
while(
$row=mysql_fetch_array($result)) $categorias[$row['cod_categoria']]=$row['id_categoria']; 
Luego, dentro del while y antes de insertar el nuevo registro, hacés:
Código PHP:
$idcategoria=$categorias[substr($data[3],0,3)]; 
Y ahí en $idcategoria tenés el id correspondiente para incluir en el insert.

Espero que sirva, saludos.
  #3 (permalink)  
Antiguo 27/01/2012, 04:10
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 22 años
Puntos: 1
Respuesta: Complicada relacion de tablas al Importar archivo csv con php

geq: ERES UN GENIO!!!!

Le agregué exactamente lo que me dijiste y le agregué también en el insert la variable $idcategoria y FUNCIONO!!!!!!
Comparé la tabla actual que tengo con esta de prueba y quedaron iguales, con las mismas relaciones.

Dejo el código completo:
Código PHP:
$row 1;
$fp fopen ('productos.csv','r'); 

$categoria=array();
$result=mysql_query("select * from categoria");
while(
$row=mysql_fetch_array($result)) $categoria[$row['cod_categoria']]=$row['id_categoria'];  

while (
$data fgetcsv ($fp1000";")) 

    
$num count ($data); 
    print 
" <br>"
    
$row++; 
    
    echo 
"$row- ".$data[4].$data[3];
     
    foreach (
$data as $pos=>$dato) { 
        
$data[$pos] = trim($dato);
    } 
  
    if (!
in_array($data[3],$ids)) {
       
   
$ids[] = $data[3];

   
$idcategoria=$categoria[substr($data[3],0,3)];  

   
$insertar="INSERT INTO lineas (desc_linea,relacion,cod_linea) VALUES ('$data[4]','$idcategoria','$data[3]')"
    
mysql_query($insertar);
    }

fclose ($fp); 
Muchísimas gracias por tu ayuda maestro.

Un gran saludo.

Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.

Etiquetas: csv, mysql, relacion, tabla, tablas
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 17:00.