PHP MySQL : Delete row if its not present in API data

标签 php mysql arrays json wordpress

我正在从 API 获取数据并将其添加到表中。 我们有一个状态来控制网站上可见的数据 如果 Status = available 在 web 上显示或者如果 Status = Expired 从网站上删除它

从 API 插入数据时,我正在运行更新和插入查询。

$final_data = $response->Results; -//Data From API JSON converted to Array

并检查数据是否已经在表中更新 如果数据不是他们的Insert

if(is_array($final_data)) {
    foreach ($final_data as $row) {
        $id = $row->id
        $data1 = $row->data1;
        $data2 = $row->data2;
        $data3 = $row->data3;
    }

    global $wpdb;

    // Insert Data if not exists
    $updateJobsDatabase_mainquery = $wpdb->get_results("SELECT id  FROM ".$table_name." WHERE id = ".$id."");

    if (count($updateJobsDatabase_mainquery) > 0) { 
        // Update query excluding id
    } else {
        // Insert query including id
    }
}

但根据此逻辑,当 API 中的数据行之一的状态更改为过期时。 它仍然保留在数据库中。

我想从本地表中删除该行。 那么什么是删除不属于 If-Else 语句的行的正确方法。即不在 API 数据中但存在于本地数据库中的额外行。

我在想 if (count($updateJobsDatabase_mainquery) = 0) 将返回与 API 数据 ID 不匹配的数据。并使用

删除它

$deleteIfStatus = $wpdb->query('DELETE FROM '.$table_name_temp.' WHERE id = what?');

但是话又说回来,我应该在 where 子句中添加什么?如果这个逻辑正确

最佳答案

如果我正确理解你的代码,你应该可以使用(假设 id 是数字)

$deleteIfStatus = $wpdb->query('DELETE FROM '.$table_name_temp.' WHERE id NOT IN (' . implode(',', array_map(function ($v) { return $v->code; }, $updateJobsDatabase_mainquery)) . ')');

如果id不是数字,使用

$deleteIfStatus = $wpdb->query('DELETE FROM '.$table_name_temp.' WHERE id NOT IN (\'' . implode("','", array_map(function ($v) { return $v->code; }, $updateJobsDatabase_mainquery)) . '\')');

关于PHP MySQL : Delete row if its not present in API data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52585000/

相关文章:

php - PHP中如何根据条件搜索数组

php - 在 PHP 程序中添加条形图/图形库

php - mysql 喜欢你和其他人

php - MYSQL/PHP 在保持数字顺序的同时向上或向下移动对象的顺序

初始化指向指针的指针时出现 C++ 错误

c++ - (C++数组问题)我想通过在DoWhile过程中输入的数字代码打印订购的食物

php - 我如何使用PHP代码找到每天的特定时间间隔

php - Laravel 查询生成器从 10 万多行中返回空行

macos - ubuntu中自动设置mysql索引前缀长度

php - 加入 eloquent orm php laravel