2011-06-22 4 views
1

私はFacebookの「お気に入り」と関連する「ファン」のすべてを表示する方法をテストしています。以下のコードは動作しますが、非常に非常に遅いです。foreach関数のためにFacebookのAPIを経由しなければならない多数のクエリのために非常に遅いと私は想定しています。私は以下のように同じことをする離れがありますが、1つだけのクエリ(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

データベースへのアクセスがあるので、私はFacebookのAPIを使用して慣れていないんだけど、あなたはSQLクエリをやっているとき、一般的に、あなたはより頻繁にあなたがする必要があるよりも、データベースを照会する必要はありません高価な操作です。

ので、代わりのファンが何度も繰り返し、一度に各ページID 1カウント選択するには、このクエリを使用してforループを使用して、

'query' => "select fan_count,name from page where page_id = $id;" 

あなたは、おそらくのためのループからのクエリを削除することもできますそして、すべてのファンが動作するかもしれない、多分

$ids = "id1, id2, ... , idn"; 

// ... 

'query' => "select fan_count,name from page where page_id in ($ids);" 

のようなものを、INのSQL構文を使用して、1つのクエリで、一度にカウントを選択し、それを書き換え?

+0

Yess、それはうまくいきました:)私はこれを前に試みましたが、IN SQLに入力された配列のすべての値をスタックしました。しかし、文字列にすべての値を追加するだけで、それはうまくいきます。それはまだ遅いですが、ずっと前よりもずっと速いです。ありがとう:) –

関連する問題