Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, com a simples função abaixo, consigo importar dados para uma tabela do mysql.
A questão é que a coluna telefone ficará em outra tabela e da forma que está hoje, só consigo importar para a mesma tabela.
Como posso fazer para importar as colunas de um arquivo csv para uma tabela e a coluna telefone importar para outra tabela ?
public function upload_file(){
$tipo = array('application/vnd.ms-excel','text/plain','text/csv','text/tsv');
if(!empty($_FILES['file']['name']) && in_array($_FILES['file']['type'],$tipo)){
if(is_uploaded_file($_FILES['file']['tmp_name'])){
// abre o arquivo csv carregado com o modo somente leitura
$arquivo = fopen($_FILES['file']['tmp_name'], 'r');
// pula a primeira linha
// se o arquivo csv não tiver cabeçalho, apenas comente a próxima linha
fgetcsv($arquivo);
// analisar dados do arquivo csv linha por linha
while(($coluna = fgetcsv($arquivo)) !== FALSE){
// verifica se o membro já existe no banco de dados com o mesmo email
$result = $this->db->get_where("tb_pessoa", array("email"=>$coluna[1]))->result();
if(count($result) > 0){
// atualiza os dados da pessoa
$this->db->update("tb_pessoa", array("nome"=>$coluna[0], "telefone"=>$coluna[2], "dt_inclusao"=>$coluna[3], "status"=>$coluna[4]), array("email"=>$coluna[1]));
}else{
// inserir dados da pessoa no banco de dados
$this->db->insert("tb_pessoa", array("nome"=>$coluna[0], "email"=>$coluna[1], "telefone"=>$coluna[2], "dt_inclusao"=>$coluna[3], "status"=>$coluna[4]));
}
}
//close opened csv file
fclose($arquivo);
$qstring["status"] = 'Success';
}else{
$qstring["status"] = 'Error';
}
}else{
$qstring["status"] = 'Invalid file';
}
$this->load->view('csvToMySQL',$qstring);
}
**tabelas**
tb_pessoa
nome varchar(100) NOT NULL
email varchar(100) NOT NULL
telefone varchar(100) NOT NULL
dt_inclusao timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
status varchar(100) NOT NULL
tb_telefone
telefone varchar(100) NOT NULL
pessoa_id int(11) NOT NULL
>
Agora, tetsuo disse:
Olá!
Remova o telefone da query de inserção na tabela tb_pessoa
após inserir/atualizar a tabela tb_pessoa, retorne a id
Crie outra query apenas para adicionar o telefone com a id retornada da query anterior
Oi, eu tentei algo do tipo, mas não consegui chegar no resultado.
Tem algum exemplo ?
Meu problema está em recuperar o ID de cada inserção.
Olá!
Depois de executar a query, recupere a id com **$this->db->insert_id()**
Veja: [https://www.codeigniter.com/userguide3/database/helpers.html](https://www.codeigniter.com/userguide3/database/helpers.html)>
2 horas atrás, tetsuo disse:
Olá!
Remova o telefone da query de inserção na tabela tb_pessoa
após inserir/atualizar a tabela tb_pessoa, retorne a id
Crie outra query apenas para adicionar o telefone com a id retornada da query anterior
Seria isto ?
Mantive a coluna telefone, mas acredito que dê pra ter uma ideia.
if(count($result) > 0){
foreach ($result as $r) {
$pessoa_id = $r->id;
$update = [
'name' => $line[0],
'phone' => $line[2],
'created' => $line[3],
'status' => $line[4]
];
$this->db->update('member', $update, array('email' => $line[1]));
$update_phone = [
'phone' => $line[2]
];
$this->db->update('phone', $update_phone, array('pessoa_id' => $pessoa_id));
}
} else {
$insert = [
'name' => $line[0],
'email' => $line[1],
'phone' => $line[2],
'created' => $line[3],
'status' => $line[4]
];
$this->db->insert('member', $insert);
$pessoa_id = $this->db->insert_id();
$insert_phone = [
'phone' => $line[2],
'pessoa_id' => $pessoa_id
];
$this->db->insert('phone', $insert_phone);
}
Olá!
Remova o telefone da query de inserção na tabela tb_pessoa
após inserir/atualizar a tabela tb_pessoa, retorne a id
Crie outra query apenas para adicionar o telefone com a id retornada da query anterior