14

在 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 调用中进行。

4

1 回答 1

7

没有办法进行连接,但是您可以使用FQL.Multiquery将 4 个查询批处理到一个调用中。对于 4个可能的事件响应,这 4 个查询各为 1 :参加、不确定、拒绝和未回复。

于 2009-06-27T19:39:42.717 回答