Я пытаюсь выбрать все общие друзья с помощью PHP / FQL. Используя мой UID (540 друзей), что означает> 12 000 соединений, из которых> 6500 являются уникальными. Таким образом, этот код должен возвращать все соединения, но Facebook, по-видимому, имеет ограничение на 4999/5000 строк для запросов FQL.
// 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 секунд. После часа поиска этого ответа я пришел к выводу, что единственный способ обойти это - использовать смесь двух методов. Хорошо, что и пост здесь. Любые идеи о лучшем способе написания этого сценария и превышении предела строки 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);