目前的代码从csv文件中获取数据,并将其导入相关的mysql表。有几个表。它插入数据,如果表是空的。如果数据已经存在,它更新它。我有一个特定的数据库中的表,必须清空每一次插入或更新数据到它。我无法实现它。这是原始代码。
This is the original code.
$records = $this->csvimport->parse_csv($this->directory . $file);
foreach ($records as $row) {
$data = $this->$function($row);
$data = $this->correct_date_format($data);
foreach ($this->$condition($data) as $column) {
$this->db->where($column, $data[$column]);
}
if ($this->db->get($table, 1)->num_rows() > 0) {
foreach ($this->$condition($data) as $column) {
$this->db->where($column, $data[$column]);
}
$this->db->update($table, $data);
} else {
$this->db->insert($table, $data);
}
}
echo json_encode(['Last_record' => $this->db->where('date', $data['date'])->get($table)->result_array()]);
表名是gap_up。下面是我所做的代码更改。但它并不像我预期的那样工作。它只是删除表内容,但没有插入新数据。
$records = $this->csvimport->parse_csv($this->directory . $file);
foreach ($records as $row) {
$data = $this->$function($row);
$data = $this->correct_date_format($data);
foreach ($this->$condition($data) as $column) {
$this->db->where($column, $data[$column]);
}
if ($this->db->get($table, 1)->num_rows() > 0) {
foreach ($this->$condition($data) as $column) {
$this->db->where($column, $data[$column]);
}
$this->db->empty_table('gap_up');
$this->db->insert(gap_up, $data);
$this->db->update($table, $data);
} else {
$this->db->insert($table, $data);
}
}
echo json_encode(['Last_record' => $this->db->where('date', $data['date'])->get($table)->result_array()]);
1条答案
按热度按时间8ehkhllq1#
当CI_DB_query_builder::insert()在内部调用CI_DB_query_builder::_reset_write()时,您需要在
insert()
调用后设置更新的where条件:这仍然意味着
gap_up
表将只包含一行,因为在插入每一行之前您将删除所有内容。这个“有意”的更新是没有意义的,因为它只会运行
UPDATE $table SET col1 = 'val1', col2 = 'val2' WHERE col1 = 'val1' AND col2 = 'val2';
,没有任何影响。尽管如此,我可能是错的,因为我们看不到你的变量方法$this->$condition()
是什么和/或做什么。它排除了一些列吗?