如何在 Codeigniter 中使用一个查询插入和更新现有数组数据?
How to insert and update existing array data with one single query in Codeigniter ?
我在 arrays
中拥有来自 table 的所有数据。其中我们 updated existing data
和一些 added new data
。此数据已从 CSV
导入并存储到 array
.
问题是:
如何使用“ON DUPLICATE KEY UPDATE
”在 Codeigniter 中通过单个查询插入和更新现有数据?
Table 之前是这样的..
id(auto incre) invoice_code item_code item_rate
1 INPO311018-1 pip640up 62
2 INPO311019-43 plxliupp 43
3 INPO311012-05 al6408f 24
同时插入和更新后 table 看起来像这样。
id(auto incre) invoice_code item_code item_rate
1 INPO311018-1 pip640up 59.99
2 INPO311019-43 plxliupp 40
3 INPO311012-05 al6408f 25.99
4 INPO011019-3 Ndry_milk 1.4
5 INPO021012-05 al894_ad 99
控制器
function import_csv()
{
$this->load->library('csvimport'); //Load Library
$file_data=$this->csvimport->get_array($_FILES["csv_file"]["tmp_name"]);
foreach ($file_data as $row) {
$data[]=array(
'id'=>$row['id'],
'invoice_code'=>$row['invoice Code'],
'item_code'=>$row['item Code'],
'item_rate'=>$row['item Code'],
);
}
$this->load->model('invoice_model');
$this->invoice_model->insert_data($data);
}
型号
function insert_data($data) //Add & Update table with "CSV"
{
$this->db->insert_batch('po_invoice',$data);
}
**非常感谢,谁会解决这个问题:) **
这太疯狂了..也许..我没有正确理解...但是试试这个...
function import_csv()
{
$this->load->model('invoice_model'); /// load it at beginning
$this->load->library('csvimport'); //Load Library
$file_data=$this->csvimport->get_array($_FILES["csv_file"]["tmp_name"]);
foreach ($file_data as $row) {
$data = array(
'id'=>$row['id'],
'invoice_code'=>$row['invoice Code'],
'item_code'=>$row['item Code'],
'item_rate'=>$row['item Code'],
);
// in order to insert or update ... you cannot use insert batch ....
// pass it one by one
$this->invoice_model->insert_update_data($data);
}
// $this->invoice_model->insert_data($data);
}
在模态...
function insert_update_data($data) //Add & Update table with "CSV"
{
$this->db->where('invoice_code',$data['invoice_code']);
$this->db->where('item_code',$data['item_code']);
$q = $this->db->get('po_invoice');
if($q->num_rows() > 0){
$this->db->where('invoice_code',$data['invoice_code']);
$this->db->where('item_code',$data['item_code']);
$this->db->update('po_invoice',$data);
} else {
$this->db->insert_batch('po_invoice',$data);
}
}
我在 arrays
中拥有来自 table 的所有数据。其中我们 updated existing data
和一些 added new data
。此数据已从 CSV
导入并存储到 array
.
问题是:
如何使用“ON DUPLICATE KEY UPDATE
”在 Codeigniter 中通过单个查询插入和更新现有数据?
Table 之前是这样的..
id(auto incre) invoice_code item_code item_rate
1 INPO311018-1 pip640up 62
2 INPO311019-43 plxliupp 43
3 INPO311012-05 al6408f 24
同时插入和更新后 table 看起来像这样。
id(auto incre) invoice_code item_code item_rate
1 INPO311018-1 pip640up 59.99
2 INPO311019-43 plxliupp 40
3 INPO311012-05 al6408f 25.99
4 INPO011019-3 Ndry_milk 1.4
5 INPO021012-05 al894_ad 99
控制器
function import_csv()
{
$this->load->library('csvimport'); //Load Library
$file_data=$this->csvimport->get_array($_FILES["csv_file"]["tmp_name"]);
foreach ($file_data as $row) {
$data[]=array(
'id'=>$row['id'],
'invoice_code'=>$row['invoice Code'],
'item_code'=>$row['item Code'],
'item_rate'=>$row['item Code'],
);
}
$this->load->model('invoice_model');
$this->invoice_model->insert_data($data);
}
型号
function insert_data($data) //Add & Update table with "CSV"
{
$this->db->insert_batch('po_invoice',$data);
}
**非常感谢,谁会解决这个问题:) **
这太疯狂了..也许..我没有正确理解...但是试试这个...
function import_csv()
{
$this->load->model('invoice_model'); /// load it at beginning
$this->load->library('csvimport'); //Load Library
$file_data=$this->csvimport->get_array($_FILES["csv_file"]["tmp_name"]);
foreach ($file_data as $row) {
$data = array(
'id'=>$row['id'],
'invoice_code'=>$row['invoice Code'],
'item_code'=>$row['item Code'],
'item_rate'=>$row['item Code'],
);
// in order to insert or update ... you cannot use insert batch ....
// pass it one by one
$this->invoice_model->insert_update_data($data);
}
// $this->invoice_model->insert_data($data);
}
在模态...
function insert_update_data($data) //Add & Update table with "CSV"
{
$this->db->where('invoice_code',$data['invoice_code']);
$this->db->where('item_code',$data['item_code']);
$q = $this->db->get('po_invoice');
if($q->num_rows() > 0){
$this->db->where('invoice_code',$data['invoice_code']);
$this->db->where('item_code',$data['item_code']);
$this->db->update('po_invoice',$data);
} else {
$this->db->insert_batch('po_invoice',$data);
}
}