php - 复制行,同时忽略基于特定列的重复项

标签 php mysql

我想从表 call_list_row 中复制行,同时更改列 listid,但我只想复制行并更改 listid > 如果没有其他具有 $new_list_id 的行已经包含具有该特定 candid 的行。

这是我必须复制行并更改 listid 的 SQL:

$sql= "INSERT INTO call_list_row (listid,candid,date,byuser,status,emailed)
         SELECT '".$new_list_id."',candid,date,byuser,status,emailed 
         FROM call_list_row WHERE listid='".$list."'";

如何修改此设置,以便表中不会有具有相同 candid 的新 $new_list_id 行?

最佳答案

在组合键上创建唯一索引listid, candid:

CREATE UNIQUE INDEX x_listid_candid ON call_list_row(listid, candid);

然后您可以使用 INSERT IGNORE,这样,如果表中已有包含该组合的行,INSERT 将被跳过,不会出现错误。

$sql= "INSERT IGNORE INTO call_list_row (listid,candid,date,byuser,status,emailed)
     SELECT '".$new_list_id."',candid,date,byuser,status,emailed 
     FROM call_list_row WHERE listid='".$list."'";

如果您无法创建此索引(也许允许重复,但您不想在此过程中创建任何新的重复),则可以 checkin 查询。

$sql= "INSERT IGNORE INTO call_list_row (listid,candid,date,byuser,status,emailed)
     SELECT '".$new_list_id."',candid,date,byuser,status,emailed 
     FROM call_list_row AS c1 WHERE listid='".$list."'
     AND NOT EXISTS (
        SELECT * FROM call_list_row AS c2
        WHERE listid = '$new_list_id' AND c1.candid = c2.candid)";

关于php - 复制行,同时忽略基于特定列的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35281172/

相关文章:

mysql - Laravel 5.4 格式化结果集

php - 没有模型的 Eloquent 关系

php - 将数据库数据传递到多个 View -Laravel

php - 基于 HTML 中设置的数据过滤器构建通用 PHP/MySQL 查询

php - 我可以检查 PHP 中是否存在 Apache 模块吗?

PHP PDO 从数据库中查询代码不显示,仅在源代码中显示

php - 字段 'x' 没有默认值

mysql - AWS RDS 可以主从复制吗?

mysql - 如何为mysql中的主自动增量整数赋予有效的默认值?

mysql - 数据库效率