我正在使用PHP为个人创建活动供稿,然后继续创建组供稿。

所以我有

表:组名
1.第一组
2.第2组
3.第3组

表:成员
1.第1组>成员1,成员2,成员3,成员4,成员5
2.第2组>成员3,成员4,成员5,成员5 ...

一些小组有成千上万的成员。
因此,每当发布提要时,我都会在执行以下操作。

$result = $this->db->query('SELECT member_id FROM members WHERE group_id = 1');
$members = $result->fetchAll();

foreach ($members as $member) {
$query = $this->db->prepare('INSERT INTO activity_feed (user_id, activity) VALUES(:user_id, :activity);

if ($result = $query->execute(array(
':user_id' => $member['member_id'],
':activity' => $activity
))) {
//do something
 $pusher->push(activity) //socket push notification
}
}


插入个人供稿仅需要插入一个mysql数据库,就如您所见,对于组供稿,当成员数增加时,循环将成倍增大。

我当时正在考虑使用单独的PHP文件填充活动供稿,并在活动发生时执行它。如何调用该单独的PHP文件?

有解决这个问题的更好的主意吗?

如果不是,每次有人向该组发布消息或将图像上传到该组时,我都必须遍历循环,然后PHP文件会花费一些时间来执行。

最佳答案

您可以将PHP代码放入单独的文件中,例如dbnotify.php,然后使用exec()进行调用:

<?php
$group = 1;
$activity = "foo";
exec("/path/to/dbnotify.php $group $activity &");


注意命令后的&,这会将它放在后台并立即返回。

现在,在您的外部脚本中,您想读取在命令行上传递的值,并将其放入查询中。另外,通过使插入单个查询,您可能可以大大提高此数据库的性能:

#!/usr/bin/php
<?php
$groupid = $argv[1];
$activity = $argv[2];


$query = $this->db->prepare("INSERT INTO activity_feed (user_id, activity) SELECT member_id, :activity FROM members WHERE group_id = :group_id");
$result = $query->execute(array(":activity"=>$activity, ":group_id"=>$groupid));


$result = $this->db->query('SELECT member_id FROM members WHERE group_id = 1');
$members = $result->fetchAll();
foreach ($members as $member) {
    $pusher->push(activity); //socket push notification
}

10-06 07:25
查看更多