2009-06-25 7 views
14

In un'applicazione Facebook ho bisogno di ottenere gli eventi di un utente per un intervallo di date e il suo stato rsvp per ogni evento.Facebook - il modo migliore per fare "join" FQL con event ed event_member?

Posso ottenere gli eventi dell'utente bene, ma al momento sto cercando lo stato rsvp per ogni evento uno alla volta e l'app sta scadendo per le persone con un numero elevato di eventi.

sto ottenendo gli eventi degli utenti in questo modo:

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

Questa parte sta lavorando bene.

Ed ecco come sto ottenendo lo stato RSVP per ogni evento, una alla volta:

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

Questo funziona bene anche su base evento-by-evento, ma i tempi di pagina app quando l'utente ha molti eventi poiché ogni evento deve essere controllato ogni volta.

Con SQL normale, potrei facilmente farlo con un join, ma i join non sono consentiti in FQL.

Una possibile soluzione è quella di fare loro in lotti da loop attraverso ogni possibilità rsvp_status, in questo modo:

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

Ciò ridurrebbe il numero di FQL chiamate verso il numero di rsvp_possibilities (tre credo), ma idealmente preferirei farlo in una chiamata FQL.

risposta

7

Non c'è un modo per fare un join, tuttavia è possibile utilizzare FQL.Multiquery per raggruppare le 4 query in una singola chiamata. Le 4 query sarebbero 1 ciascuna per il 4 possible event responses: presente, incerto, rifiutato e non_riservato.

Problemi correlati