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.