如果表中不存在ID,则在表中插入多个记录

时间:2014-12-20 07:56:41

标签: php mysql codeigniter

如果表中尚不存在员工ID,我想在多个员工的单个表中添加多个记录。我有数组中的员工ID。

Array ( [0] => Array ( [EmployeeID] => 1 ) [1] => Array ( [EmployeeID] => 2 ) )

现在我有一张表格,我想检查一下如果员工记录存在,那么如果某个员工的记录不存在则不要插入,然后插入。

是的,我有桌子。

INSERT INTO timesheet (employee_id,date_created) Values (1,2014-12-20),(2,2014-12-20) where employee_id NOT IN (1,2)

我知道我写的上述查询不对,但这就是为什么我只想知道如果该特定ID的记录不存在,如何插入到表中。

我使用codeigniter,如果您也以codeigniter的方式知道那将会很棒。但简单的mysql查询帮助也适用于我。

3 个答案:

答案 0 :(得分:1)

尝试使用NOT EXIST这样的句子:

INSERT INTO timesheet (employee_id,date_created) 
select 1,'2014-12-20'
from dual
WHERE NOT EXISTS (
   SELECT * 
   FROM timesheet 
   WHERE employee_id in (1)
);

对于多行,您必须按如下方式添加虚拟行(或者只是在循环中执行前一个语句)

INSERT INTO timesheet (employee_id,date_created) 
select * from (
    select 1 AS ID,'2014-12-20'
    union all 
    select 2 AS ID, '2014-12-20'
    union all 
    select 3 AS ID, '2014-12-20'
) t
WHERE NOT EXISTS (
   SELECT * 
   FROM timesheet 
   WHERE employee_id = t.ID
);

Demo Fiddle

感谢Spock进行更正! :)

答案 1 :(得分:1)

首先确保employee_id是主键和/或唯一索引。然后,您可以使用ON DUPLICATE KEY UPDATE

将此视为参考:MySQL - insert if doesn't exist yet

答案 2 :(得分:1)

$data=Array ( Array ( 'EmployeeID' => 1 ),Array ( 'EmployeeID' => 2 ) );
 echo '<pre>';
 print_r($data);
 foreach ($data as $key => $value) {
    echo $str="INSERT INTO timesheet (employee_id,date_created) Values (1,2014-12-20),(2,2014-12-20) where employee_id NOT IN ($key)";
    echo '<br>';
 }

enter image description here