在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调用中执行此操作。
答案 0 :(得分:7)
无法进行加入,但您可以使用FQL.Multiquery将4个查询批量处理为单个调用。对于4 possible event responses,4个查询各为1个:参加,不确定,拒绝和未回复。