编辑此代码以避免性能损失的更有效方法是什么?

时间:2012-03-28 02:03:50

标签: php mysql facebook

使用Facebook FQL问题我想显示我在Facebook上管理的页面列表中的消息。我已将所有权限设置为正确。所以,对于一个页面

SELECT message FROM stream WHERE source_id = 260781667265525

我收到了最后的帖子。
因为我想避开每个页面的1个问题,所以我没有运气就试过这个问题。也许FB不允许它。

SELECT message FROM stream WHERE source_id IN (260781667265525,144001959017107,126981654044612,245831082115900)

我想要实现的是性能更好的编写代码,但我想我必须排除IN(如果我对上述查询是正确的话)。

我试图在每个页面中包含最新帖子的部分代码如下所示。

$pagesFanCounts = $facebook->api("/fql", array(
  "q" => "SELECT page_id, name, fan_count FROM page WHERE page_id IN ({$pagesIds})"
));

   foreach ($pagesFanCounts['data'] as $page){
      echo "{$page['name']} - {$page['fan_count']} fans", '<br />';
   }

// names + fans are printed correctly. My goal is to add 2-3 of the latest posts of every page


$latestPosts= $facebook->api("/fql", array("q" => "SELECT message FROM stream WHERE source_id = 260781667265525 LIMIT 2 "));
   foreach ($latestPosts['data'] as $post){
      echo "{$post['message']}", '<br />';
   }

1 个答案:

答案 0 :(得分:0)

通常“IN”查询非常昂贵。你可能最好使用WHERE source_id IS'$ source1'或source_id IS'$ source2'......等等。

获得良好性能的另一种方法是单独运行查询并以编程方式将它们一起添加。有时这会给你带来更好的表现。

$result = array();
foreach( $pagesIds as $id) {
  $pagesFanCounts = $facebook->api("/fql", array(
  "q" => "SELECT page_id, name, fan_count FROM page WHERE page_id IS $id"
  ));
  $result[] = $pagesFanCounts['data'];
}
//now handle the data as you wish with $result