Facebook: ¿la mejor manera de hacer FQL "unirse" con Event y Event_Member?
-
20-08-2019 - |
Pregunta
En una aplicación de Facebook, necesito obtener los eventos de un usuario para un rango de fechas y su estado de RSVP para cada evento.
Puedo obtener bien los eventos del usuario, pero en este momento estoy buscando el estado de RSVP para cada evento uno a la vez, y la aplicación se está agotando para las personas con una gran cantidad de eventos.
Estoy obteniendo los eventos del usuario de esta manera:
$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 bien.
Y así es como obtengo el estado de RSVP para cada evento, uno a la vez:
$fql = "SELECT rsvp_status
FROM event_member
WHERE uid = $user
AND eid = '$event_id'";
Esto también funciona bien en caso de evento por eventos, pero la página de la aplicación se desprende cuando el usuario tiene muchos eventos ya que cada evento tiene que ser revisado cada vez.
Con SQL normal, podría hacerlo fácilmente con una unión, pero las uniones no están permitidas en FQL.
Una posible solución es hacerlos en lotes al pasar por cada posibilidad 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";
Esto reduciría el número de llamadas de FQL al número de RSVP_Possibilies (tres, creo), pero idealmente prefiero hacerlo en una llamada FQL.
Solución
No hay forma de hacer una unión, sin embargo, puede usar Fql.multiquer Para lanzar sus 4 consultas en una sola llamada. Las 4 consultas serían 1 cada una para el 4 respuestas posibles de eventos: Asistente, inseguro, rechazado y no_Replied.