在循环中插入sql查询一个好的做法还是坏的?

OM *_*ity 9 php sql foreach for-loop insert

我有一个用户列表,需要使用foreach循环进行迭代,并插入到db表中每个新行的表中.

$data['entity_classid'] = $classid;
    $data['notification_context_id'] = $context_id;
    $data['entity_id'] = $entity_id;
    $data['notification_by'] = $userid;
    $data['actionid'] = $actionid;
    $data['is_read'] = 0;
    $data['createdtime'] = time();
    foreach($classassocusers as $users){
            $data['notification_to'] = $users->userid;
            $DB->insert_record('homework.comments',$data,false);
        }
Run Code Online (Sandbox Code Playgroud)

所以使用上面给出的插入查询是

  1. 一个好的做法或不好的做法,
  2. 我应该在每次插入查询执行后放置任何延迟吗?
  3. 这样做的利弊是什么?

谢谢

Jul*_*les 8

在您的情况下使用这样的查询是一个很好的做法.您无论如何都必须插入用户列表,因此您必须处理许多查询.没办法解决这个问题!

我不知道你为什么要在每次插入后放置延迟.这些方法是同步调用,因此在执行查询期间,代码将"暂停".所以推迟它只会延迟你的代码而没有任何进展.

因此,在执行查询时,您的循环将不会继续.所以不要故意延迟你的代码.

另一种方法是执行一个查询.

$user_data = "";
foreach($classassocusers as $users) {
   $user_data .= "('" . $users->userid . "', '" . $users->name . "'), ";
}

$user_data = substr($user_data, 0, strlen($user_data) - 2);

$query = "INSERT INTO `homework.comments` ( `id`, `name` )
          VALUES " . $user_data;
Run Code Online (Sandbox Code Playgroud)

那应该是这样的查询:

INSERT INTO `homework.comments` ( `id`, `name` )
VALUES ('1', 'John'),
       ('2', 'Jeffrey'),
       ('3', 'Kate');
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,我对你的$users对象和你的表格结构做了一些假设.但我相信你能理解这个想法)