如何在不使用服务器端循环的情况下插入许多行

时间:2018-12-27 07:45:03

标签: php sql codeigniter mysqli

我有一个用户表和通知表

我想为每个具有(admin)

角色的用户插入通知

如何使用SQL命令执行此操作?无需循环,也无需服务器端的(插入)命令

 SELECT id.users FROM users
 , (
INSERT INTO `notifications` (`id`, `note`, `link`, `type`, `object_id`, `user_id`, `status`, `status_2`, `user`, `date`) VALUES (NULL, '', '', '', '', id.user , '', '', '', '');

)

WHERE user_role.users = "admin"

ps:我正在使用CodeIgniter

我尝试过,但是语法错误

2 个答案:

答案 0 :(得分:2)

$this->db->insert_batch()

根据您提供的数据生成插入字符串,然后运行查询。您可以将数组或对象传递给函数。这是一个使用数组的示例:

$data = array(
        array(
                'title' => 'My title',
                'name' => 'My Name',
                'date' => 'My date'
        ),
        array(
                'title' => 'Another title',
                'name' => 'Another Name',
                'date' => 'Another date'
        )
);

$this->db->insert_batch('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'),  ('Another title', 'Another name', 'Another date')

对于大型阵列或批处理,您可以将数据分成如下所示的块:

$chunks = array_chunk($data, 500);

foreach ($chunks as $key => $chunk) {
    $this->db->insert_batch('table', $chunk);
}

答案 1 :(得分:0)

您可以尝试从表中创建一个与select语句结合的插入语句(您非常接近-但语法错误)-请尝试以下操作

$this->db->query("
    INSERT INTO `notifications` (`note`, `link`, `type`, `object_id`, `user_id`, `status`, `status_2`, `user`, `date`)
    SELECT '' AS note, '' AS link, '' AS type, '' AS object_id, id, '' AS status, '' AS status_2, '' AS user, '' AS date  FROM users WHERE user_role.users = 'admin'
");

我假设您在通知表中的id字段是自动递增的-因此我将其忽略了。