我有一个用户列表,需要使用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);
}
所以使用上面给出的插入查询是
由于
答案 0 :(得分: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;
那应该是这样的查询:
INSERT INTO `homework.comments` ( `id`, `name` )
VALUES ('1', 'John'),
('2', 'Jeffrey'),
('3', 'Kate');
(顺便说一下,我对你的$users
对象和你的表结构做了一些假设。但我确定你理解了这个想法)
答案 1 :(得分:3)
这完全取决于您的要求。
如果您在5分钟内运行500,000次这些更新 - 每15分钟一次,您的数据库将会遇到困难。如果你每15分钟为1.000个用户执行此操作 - 这是一个很好的方法。
当要求表演时,请遵循以下内容:
否则,这是一个很好的方法!