php - 插入新行,更新旧行 : how?

标签 php sql mysql

我正在制作一个 PHP 实用程序,它将 CSV 文件导入并分析到 $data 中,以及是否将"new"行插入数据库 ($saveNew )。

现在,我遇到了一些丑陋的困惑:(在广义的伪 PHP 中)

function synchronize($data,$saveNew) {
    $existing_ids = $table->find_all('ID'); //array of ID's in the table
    $incoming_ids = get_key('ID',$data); //grabs the ID field from each record
    $new_ids = array_diff($incoming_ids,$existing_ids);

    foreach ($data as $record) {
        if (in_array($record['ID'],$new_ids)) { //it's new
            if ($saveNew) $table->insert($record);
            else continue;
        } else {
            $table->update($record);
        }
     }
 }

对我来说,这只是有一种味道,我想我可以通过一个查询来完成这个任务,只是我对 SQL 不太熟悉。

我在应用程序中使用简单的 ORM,但我可以轻松地直接使用 SQL。

哦,我正在使用 MySQL。

这可以通过一个查询来完成吗?这似乎是一个常见问题,有一个简单的解决方案,但我就是无法弄清楚。

最佳答案

看看 MySQL 的 INSERT ... ON DUPLICATE KEY ... 语法,它允许您执行此操作:http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

您是否想在 ORM 中或在您的特定子例程中实现它取决于您......

关于php - 插入新行,更新旧行 : how?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3372583/

相关文章:

phpMyAdmin/MySQL 导出用户/权限供以后导入

php日期格式不在数据库中插入时间

c# - Entity Framework 生成的 SQL

mysql - 列出百分比大于某个数字的所有员工

PHP 返回 "Warning: Unable to save result set"但 MySQL 工作台正确返回

Mysql-使用 TIMESTAMPDIFF 两天之间不同

javascript - JSON 整数自动转为除 id 之外的字符串

php - 查询结果为空

mysql - 如何从LARAVEL中同一数据库下的另一个表中获取值?

mysql - 如何计算Rails应用程序上每个用户的存储空间?