Facebook: il modo migliore per fare FQL "unisciti" con event ed event_member?
-
20-08-2019 - |
Domanda
In un'app di Facebook ho bisogno di ottenere gli eventi di un utente per un intervallo di date e il suo stato RSVP per ogni evento.
Posso ottenere bene gli eventi dell'utente, ma al momento sto cercando lo stato RSVP per ogni evento alla volta, e l'app sta scattando per le persone con un gran numero di eventi.
Sto ricevendo gli eventi dell'utente 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 funziona bene.
Ed ecco come sto ottenendo lo stato RSVP per ogni evento, uno alla volta:
$fql = "SELECT rsvp_status
FROM event_member
WHERE uid = $user
AND eid = '$event_id'";
Questo funziona bene anche su base per evento per evento, ma la pagina dell'app si stacca quando l'utente ha molti eventi poiché ogni evento deve essere alzato ogni volta.
Con il normale SQL, potrei facilmente farlo con un join, ma i join non sono ammessi in FQL.
Una possibile soluzione è farli in batch, passando attraverso ogni possibilità di RSVP_STATUS, come questa:
$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 chiamate FQL al numero di RSVP_Possibilities (tre credo), ma idealmente preferirei farlo in una chiamata FQL.
Soluzione
Non c'è un modo per fare un join, ma puoi usare Fql.mulquery Per rallentare le tue 4 query in una singola chiamata. Le 4 query sarebbero 1 ciascuna per il 4 possibili risposte degli eventi: frequentare, insicuro, rifiutato e not_replied.