我正在导入excel数据并将其插入到我的mysql数据库中,这已经成功了,我现在要做的是在我插入后更新。
有没有办法做到这一点?
例如:我的总数据是32,所以如果我再次导入Excel,它也应该是32,但如果我的Excel工作表中有任何变化,它应该更新。
控制器:
function import()
{
if(isset($_FILES["file"]["name"]))
{
$path = $_FILES["file"]["tmp_name"];
$object = PHPExcel_IOFactory::load($path);
foreach($object->getWorksheetIterator() as $worksheet)
{
$highestRow = $worksheet->getHighestRow();
$highestColumn = $worksheet->getHighestColumn();
for($row=16; $row<=$highestRow; $row++)
{
$studentID = $worksheet->getCellByColumnAndRow(1, $row)->getValue();
$name = $worksheet->getCellByColumnAndRow(2, $row)->getValue();
$grade = $worksheet->getCellByColumnAndRow(5, $row)->getValue();
$subject = $worksheet->getCellByColumnAndRow(2, 8)->getValue();
if(isset($studentID)){
if($name != null){
$data[$row] = array(
'studentID' => $studentID,
'name' => $name,
'grade' => $grade,
'subject' => $subject
);
}
}else{
if($name != null){
$dataUpdate[$row] = array(
'studentID' => $studentID,
'grade' => $grade,
'subject' => $subject
);
}
}
}
}
if(isset($data)){
$this->loading_model->insert($data);
}
if(isset($dataUpdate)){
echo 'Something';
}
echo 'Data Imported successfully';
}
}
产品型号:
function insert($data)
{
$this->db->insert_batch('tbl_college_grades', $data);
}
function update($data)
{
$this->db->update_batch('tbl_college_grades', $data);
}
1条答案
按热度按时间vm0i2vca1#
它从您要导入的数据开始。您需要一种方法来唯一标识Excel数据中的每一行。例如,如果您可以提供“Email”,它可能是一个很好的候选项。或者,“name”和“subject”的组合是唯一的?
您的数据库需要将此相同列(或组合)设置为唯一,以便与您正在导入的Excel数据匹配。
然后,您可以执行UPSERT,它将自动检查您要插入的行是否已经具有给定唯一键的匹配项,如果没有找到匹配项,它将使用当前数据(可能是新的)更新该行并创建新行。