Frage

In einer Facebook -App muss ich die Ereignisse eines Benutzers für einen Datumsbereich und seinen RSVP -Status für jedes Ereignis erhalten.

Ich kann die Ereignisse des Benutzers in Ordnung bringen, aber im Moment suche ich den RSVP -Status für jedes Ereignis einzeln und die App zeitlich für Menschen mit einer großen Anzahl von Ereignissen.

Ich bekomme die Ereignisse des Benutzers auf diese Weise:

$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";

Dieser Teil funktioniert gut.

Und so bekomme ich den RSVP -Status für jedes Ereignis nacheinander:

$fql = "SELECT rsvp_status 
        FROM event_member 
        WHERE uid = $user
          AND eid = '$event_id'";

Dies funktioniert auch auf Ereignis-für-Event-Basis einwandfrei, aber die App-Seite zeitweise, wenn der Benutzer viele Ereignisse hat, da jedes Ereignis jedes Mal nachgeschaut werden muss.

Mit normalem SQL könnte ich dies leicht mit einem Join tun, aber in FQL sind nicht erlaubt.

Eine mögliche Lösung besteht darin, sie in Stapeln durchzuführen, indem sie jede Möglichkeit rsvp_status durchschleifen, wie folgt:

$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";

Dies würde die Anzahl der FQL -Anrufe auf die Anzahl der RSVP_Possibilitäten verringern (drei glaube ich), aber im Idealfallerweise würde ich es lieber in einem FQL -Anruf tun.

War es hilfreich?

Lösung

Es gibt keine Möglichkeit, einen Join durchzuführen, wie Sie verwenden können Fql.multiquery Um Ihre 4 Abfragen in einen einzigen Anruf zu stellen. Die 4 Abfragen wären jeweils 1 für die 4 mögliche Ereignisantworten: Teilnahme, unsicher, abgelehnt und nicht mehr.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top