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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top