我一直在测试一种方式来显示我所有的Facebook“喜欢”以及相关数量的“粉丝”。下面的代码可以工作,但非常......非常慢......我认为它是如此之慢,因为由于foreach函数需要通过Facebook的api进行大量查询。有没有与我在下面做同样的事情,但只有一个查询(不使用foreach)?
require_once('src/facebook.php');
$facebook = new Facebook(array(
'appId' => '12345',
'secret' => 'blablabla',
'api' => '172737262',
'cookie' => true,
));
$likes = $facebook->api('/me/likes');
foreach($likes[data] as $value){
$id = $value['id'];
$fans = $facebook->api(array(
'method' => 'fql.query',
'query' => "select fan_count,name from page where page_id = $id;"
));
echo "$id - {$fans[0]['fan_count']} - {$value['name']}<br>";
unset($id,$fans);
}
答案 0 :(得分:0)
我不熟悉Facebook API,但一般来说,当您进行SQL查询时,您不希望比必须更频繁地查询数据库,因为访问数据库是一项昂贵的操作。
因此,不要使用带有此查询的for循环来一次一个地选择每个页面ID的扇形数,一遍又一遍,
'query' => "select fan_count,name from page where page_id = $id;"
您可以从for循环中删除查询并重写它以在一个查询中一次性选择所有扇形计数,使用IN SQL语法,如
$ids = "id1, id2, ... , idn";
// ...
'query' => "select fan_count,name from page where page_id in ($ids);"
也许这可行?