0

此代码从我的数据库中提取用户 ID 并向他们发送消息。问题是试图同时向所有用户发送消息,而我的数据库出现故障。如果我将它发送给许多用户,我会收到错误。有人可以帮我让它同时向 1 个或 2 个用户发送消息,并且可能会在消息之间延迟几秒钟吗?

$result = mysql_query("
        SELECT
            *
        FROM
            offline_access_users
    ");

    if($result){
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
            $msg['access_token'] = $row['access_token'];
            try {
                $facebook->api('/me/feed', 'POST', $msg);
                $output .= "<p>Posting message on '". $row['name'] . "' wall success</p>";
            } catch (FacebookApiException $e) {
                $output .= "<p>Posting message on '". $row['name'] . "' wall failed</p>";

            }
        }
    }
4

2 回答 2

0

你需要考虑一下。

首先,您需要在cronjob中执行此操作,例如每 5 分钟运行一次。

之后,您需要了解如何限制每人每天一次(或您想要的任何限制)不更频繁地发送消息 - 因此您需要message_sent_date在表格中创建一个额外的字段。

然后,您需要限制每次运行 cronjob 的用户数量。

// replace mysql with mysqli or PDO !!!
$result = mysqli_query($link, "
        SELECT *
        FROM offline_access_users
        ORDER BY message_sent_date ASC
        LIMIT 5
    "); // this takes the 5 users that received messages the longest time ago

接下来,在while循环内部,执行这个查询(在 try 块中)。

$updateQuery = "UPDATE offline_access_users SET message_sent_date = CURRENT_TIMESTAMP WHERE id = {$row[id]}";

应该是这样,让我知道它是怎么回事。

结果

这个脚本会每5分钟运行一次,并选择5个没有收到消息的用户(这里的逻辑看你需要什么,所以你应该清楚一点)。

于 2013-01-29T11:51:37.743 回答
-1

试试下面的代码:

$offset = 0; //Starting Point
$limit = 2;  //Number of records to work with per loop
while(1)
{
    $result = mysql_query("
        SELECT * FROM offline_access_users LIMIT $offset,$limit
    ");

    if($result){
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
            $msg['access_token'] = $row['access_token'];
            try {
            $facebook->api('/me/feed', 'POST', $msg);
            $output .= "<p>Posting message on '". $row['name'] . "' wall success</p>";
            } catch (FacebookApiException $e) {
                $output .= "<p>Posting message on '". $row['name'] . "' wall failed</p>";

            }
        }
    }
    else
        break;
    $offset = $offset + $limit;
}
于 2013-01-29T11:52:23.317 回答