Ver Mensaje Individual
  #12 (permalink)  
Antiguo 23/06/2009, 12:21
Avatar de Tx
Tx
 
Fecha de Ingreso: enero-2002
Ubicación: Cba - Arg
Mensajes: 188
Antigüedad: 22 años, 3 meses
Puntos: 1
Respuesta: Importar desde Excel a Mysql.

Lo que dices ya es sobre SQL.
Para el insert, tu tabla personas tiene 3 campos, id (int autonumerico), nom (varchar(255)) y dni varchar(255)

Código:
++++++++++++++++++
+ id + nom + dni +
++++++++++++++++++
si quieres hacer un insert seria:

Código:
INSERT INTO personas(nom,dni) VALUES('marcos','123');
ó
Código:
INSERT INTO personal(dni,nom) VALUES('123','marcos');
es lo mismo, tiene que corresponder el orden de los valores con el de los campos.

El ID no lo incluimos, ya que se genera automaticamente con cada insert.
Bien, si en vez de 1 registros quiero agregar 3 ó x, seria algo asi:

Código:
INSERT INTO personas(nom,dni) VALUES('Marcos','123'),('Maria','345'),('Marcelo','456');
ó
Código:
INSERT INTO personas(nom,dni) VALUES('Marcos','123');
INSERT INTO personas(nom,dni) VALUES('Maria','345');
INSERT INTO personas(nom,dni) VALUES('Marcelo','456');
la primera es muchos mas rapida asi que te recomiendo usar esta.

Bueno, seguimos con el armado del SQL.
La funcion fgetcsv, lee una linea del archivo CSV, y devuelve los campos que contenga como una matriz.
Para la tabla de ejemplo, el archivo CSV tendria que tener el siguiente formato de columnas y filas:

Código:
"Marcos";"123"
"Maria";"345"
"Marcelo";"456"
PHP al leer la primera linea con la funcion fgetcsv:
Código PHP:
$linea fgetcsv($fp,1000,'"'); 
devolvera:
Código PHP:
$linea = array(0=>Marcos1=>123); 
Osea, para hacer este insert seria asi:
Código PHP:
$SQL "INSERT INTO personas(nom,dni) VALUES('".$linea[0]."','".$linea[1]."')"
pero como tengo un bucle que me lee todas las lineas del archivo CSV hasta el final, pongo lo que corresponde a los valores en otra matriz para despues unirla, ya que no se cuantas lineas tendria que leer.

Código PHP:
$tmpSQL = array();
while((
$linea=fgetcsv($fp,1000,'"'))!==FALSE){
    
$tmpSQL[] = "('".$linea[0]."','".$linea[1]."')";

al final de la lectura del archivo, $tmpSQL tendra los siguiente valores:

Código PHP:
$tmpSQL = array(
        
=> ('Marcos','123'),
        
=> ('Maria','345'),
        
=> ('Marcelo','456')
        ); 
Para el armado final, necesito que esos valores agregarlos a mi sentencia SQL.
Código PHP:
$SQL "INSERT INTO personas(nom,dni) VALUES".implode(',',$tmpSQL); 
lo que da como resultado:

Código PHP:
$SQL "INSERT INTO personas(nom,dni) VALUES('Marcos','123'),('Maria','345'),('Marcelo','456'); 
que luego pasare a mi funcion mysql_query() para que haga el insert en la base.

Espero que quede mas claro ahora, suerte!