PHP/FQL とのすべての共通の友人の接続を選択しようとしています。私の UID (540 人の友人) を使用すると、12,000 を超える接続を意味し、そのうち 6,500 を超える接続は一意です。したがって、このコードはすべての接続を返すはずですが、Facebook では FQL クエリで 4999/5000 行の制限があるようです。
// select mutual unique friends
$unique_connections = $facebook->api_client->fql_query("
SELECT uid1, uid2 FROM friend
WHERE uid1 IN
(SELECT uid2 FROM friend WHERE uid1=$uid)
AND uid2 IN
(SELECT uid2 FROM friend WHERE uid1=$uid)
");
上記の数字は、私が書いた元のコードがフレンド リストをループ処理し、それぞれに対して getMutualFriend クエリを送信するため、わかっています。
foreach ($friends as $key)
{
$mutual_friends = $facebook->api_client->friends_getMutualFriends($key);
foreach ($mutual_friends as $f_uid)
{
array_push($all_connections, array($key,$f_uid));
}
}
もちろん、そのスクリプトの実行には約 3 分かかりますが、FQL クエリは 5 秒で返されます。この答えを1時間検索した後、これを回避する唯一の方法は2つの方法を組み合わせて使用 することであるという結論に達しました。それでは、ここに投稿してください。このスクリプトを記述して 4999/5000 行の制限を超えるより良い方法についてのアイデアはありますか?
上記と同じことを行う fql_multiquery を次に示します。こちらも4999/5000限定です。
$queries = '{
"user_friends":"SELECT uid2 FROM friend WHERE uid1 = '.$uid.'",
"mutual_friends":"SELECT uid1, uid2 FROM friend WHERE uid1 IN (SELECT uid2 FROM #user_friends) AND uid2 IN (SELECT uid2 FROM #user_friends)"
}';
$mq_test = $facebook->api_client->fql_multiquery(trim($queries));
print_r($mq_test);