14

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 呼び出しで実行したいと思います。

4

1 に答える 1

7

結合を行う方法はありませんが、FQL.Multiqueryを使用して 4 つのクエリを 1 回の呼び出しにバッチ処理できます。4 つのクエリは、4 つの可能なイベント応答(出席、不明、辞退、および not_replied) に対してそれぞれ 1 つになります。

于 2009-06-27T19:39:42.717 に答える