我想从表 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/