Facebook - Melhor maneira de fazer o FQL “participe” com o evento e o evento?
-
20-08-2019 - |
Pergunta
Em um aplicativo do Facebook, preciso obter os eventos de um usuário para um intervalo e seu status de RSVP para cada evento.
Eu posso obter bem os eventos do usuário, mas no momento estou procurando o status do RSVP para cada evento, um de cada vez, e o aplicativo está divulgando pessoas com um grande número de eventos.
Estou recebendo os eventos do usuário desta maneira:
$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";
Esta parte está funcionando bem.
E eis como estou recebendo o status do RSVP para cada evento, um de cada vez:
$fql = "SELECT rsvp_status
FROM event_member
WHERE uid = $user
AND eid = '$event_id'";
Isso também funciona bem em uma base de eventos a eventos, mas a página do aplicativo se destaca quando o usuário tem muitos eventos, já que cada evento está tendo que ser procurado a cada vez.
Com o SQL normal, eu poderia facilmente fazer isso com uma junção, mas as junções não são permitidas no FQL.
Uma solução possível é fazê -los em lotes, atravessando cada possibilidade de RSVP_STATUS, como esta:
$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";
Isso reduziria o número de chamadas FQL para o número de RSVP_Possibilidades (três, acho), mas, idealmente, prefiro fazê -lo em uma chamada FQL.
Solução
Não há uma maneira de fazer uma junção, mas você pode usar FQL.Multiquey Para lotar suas 4 consultas em uma única chamada. As 4 consultas seriam 1 cada para o 4 possíveis respostas de eventos: presença, insegura, recusou e não_replied.