Facebook アプリでは、日付範囲のユーザーのイベントと、各イベントの rsvp ステータスを取得する必要があります。
ユーザーのイベントを正常に取得できますが、現時点では、各イベントの rsvp ステータスを一度に 1 つずつ調べており、多数のイベントを持つユーザーに対してアプリがタイムアウトしています。
私はこの方法でユーザーのイベントを取得しています:
$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 ステータスを一度に 1 つずつ取得する方法は次のとおりです。
$fql = "SELECT rsvp_status
FROM event_member
WHERE uid = $user
AND eid = '$event_id'";
これもイベントごとにうまく機能しますが、ユーザーが多くのイベントを持っていると、各イベントを毎回検索する必要があるため、アプリ ページがタイムアウトします。
通常の SQL では、これを結合で簡単に実行できますが、結合は FQL では許可されていません。
考えられる解決策の 1 つは、次のように、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 つ) まで減りますが、理想的には 1 回の FQL 呼び出しで実行したいと思います。