В приложение на Facebook трябва да получа събития на потребител за период от време и неговия статус на отговор за всяко събитие.
Мога да получа добре събитията на потребителя, но в момента търся статуса на rsvp за всяко събитие едно по едно и приложението изтича за хора с голям брой събития.
Получавам събитията на потребителя по този начин:
$fql = "SELECT eid, name, start_time, end_time
FROM event
WHERE eid IN (SELECT eid
FROM event_member
WHERE uid = $user)
AND start_time > '$timestamp'
ORDER BY start_time";
Тази част работи добре.
И ето как получавам статуса на rsvp за всяко събитие, едно по едно:
$fql = "SELECT rsvp_status
FROM event_member
WHERE uid = $user
AND eid = '$event_id'";
Това също работи добре на базата на събитие по събитие, но страницата на приложението изтича, когато потребителят има много събития, тъй като всяко събитие трябва да се търси всеки път.
С нормален SQL бих могъл лесно да направя това с присъединяване, но присъединяванията не са разрешени в FQL.
Едно възможно решение е да ги направите на партиди, като преминете през всяка възможност за rsvp_status, като това:
$fql = "SELECT eid, name, start_time, end_time
FROM event
WHERE eid IN (SELECT eid
FROM event_member
WHERE uid = $user
and rsvp_status = 'attending')
AND start_time > '$timestamp'
ORDER BY start_time";
Това ще намали броя на FQL извикванията до броя на rsvp_possibilities (три мисля), но в идеалния случай бих предпочел да го направя в едно FQL извикване.