在 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";
这部分工作正常。
以下是我如何获取每个事件的回复状态,一次一个:
$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 的数量(我认为是 3 个),但理想情况下我宁愿在一次 FQL 调用中完成此操作。