2016-02-08 1 views
0

Я хочу, чтобы скопировать строки из моей таблицы call_list_row в то время как изменения колонки listid, но я только хочу, чтобы скопировать строку и изменить listid, если нет другой строки с $new_list_id уже не имеет ряд с этим конкретным candid.Копирование строк в то время игнорируя дубликаты на основе конкретного столбца

Это SQL я должен скопировать строки и изменить listid:

$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."'"; 

Как я могу изменить это так, что не будет ни одной строки в таблице, которые имеют новый $new_list_id с тем же candid ?

+0

Check [ 'INSERT ... ON KEY DUPLICATE UPDATE'] (http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html) синтаксис. – miken32

ответ

2

Создать уникальный индекс на составных ключах 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."'"; 

Если вы не можете создать этот индекс (возможно, дубликаты разрешены, но вы не хотите создавать новые дубликаты в этой процедуре), вы можете проверить в запросе.

$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)"; 
+0

Большое спасибо, я пошел на второй метод, поскольку дубликаты разрешены вообще, но не для этой процедуры – dlofrodloh

Смежные вопросы