我正在尝试编写脚本以从数据库中的API插入数据,但是如果已经存在,请更新数据。下一步,如果数组中不存在数据,我想从数据库中删除数据。 (现在,如果我能进行更新,已经很高兴了)
已经搜寻了2天,为我的问题找到了解决方案,但是我尝试过的任何方法都没有帮助。现在,我第一次进行插入操作,因此它将初始调用写入数据库,但是所有后续调用均不执行任何操作。不再有更新或插入。
在我的情况下,无法使用ON DUPLICATE KEY UPDATE选项,因为代码中提到的ID并非我要插入的表的主键。(此代码只是示例,实际的数据库是有点复杂,我不能更改表本身。
$content = file_get_contents($url);
$array = json_decode($content, true);
$sql = array();
$update = array();
foreach($array as $row) {
// Create insert string
$sql[] = '('.$row['userId'].', '.$row['id'].', "'.mysqli_real_escape_string($link, $row['title']).'", "'.mysqli_real_escape_string($link, $row['body']).'")';
// Create update data
$update[] = 'UPDATE TestDB.testTabel SET userId='.$row['userId'].', id='.$row['id'].', title= "'.mysqli_real_escape_string($link, $row['title']).'", body = "'.mysqli_real_escape_string($link, $row['body']).'" WHERE id = '.$row['id']. ';';
$flag = 0;
$query = "SELECT id FROM TestDB.testTabel WHERE id =".$row['id'];
$result = mysqli_query($link, $query);
if(mysqli_num_rows($result) > 0) {
$flag=1;
}
else {
$flag=0;
}
}
if($flag==1) {
echo 'found!';
mysqli_query($link, " ".implode('', $update));
//print ''.implode('', $update);
}
else if ($flag==0) {
echo 'not found!';
mysqli_query($link, "INSERT INTO TestDB.testTabel (userId, id, title, body) VALUES ".implode(',', $sql));
// print 'INSERT INTO TestDB.testTabel (userId, id, title, body) VALUES '.implode(',', $sql);
}
else {
echo 'ERROR!';
}
我希望脚本检查每个数组行是否存在,如果存在->更新,否则->插入。
所以基本上,我想做的事(用伪代码):
从API获取数据
每个[API记录]{ 查询数据库以查看ID是否已经存在
如果(ID存在){ 更新记录 }
否则,如果(ID不存在)( 插入记录 }
else { 错误 } }
对于每个[数据库记录] { 检查数据库ID是否在API数据中
如果(数据库ID不在API数据中){ 从数据库中删除记录 }
else { 没做什么 } }
现在真的卡住了:(谁能帮帮我?
答案 0 :(得分:0)
您要用于检查重复性的列不必是表的主键。
如果您指定ON DUPLICATE KEY UPDATE子句,并且要插入的行将导致UNIQUE索引或PRIMARY KEY中的值重复,则会发生旧行的UPDATE
您应该在要防止重复的列上创建唯一索引。不仅可以使用INSERT ... ON DUPLICATE KEY UPDATE
语法,而且这是在数据库中表示您的需求的正确方法。
CREATE UNIQUE INDEX my_index ON mytable(column_1, column_2, ...);