在一个Facebook应用程序中,我需要获取一个日期范围内的用户事件以及每个事件的rsvp状态。
我可以很好地处理用户的事件,但此刻我一次一次查找每个事件的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调用中执行此操作。
最佳答案
无法进行联接,但是可以使用FQL.Multiquery将4个查询分批处理到一个调用中。 4 possible event responses的4个查询将各为1个:出席,不确定,拒绝和not_replied。
关于facebook - Facebook —与event和event_member进行FQL“联接”的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1045842/