Dans une application Facebook, je dois obtenir les événements d'un utilisateur pour une plage de dates et son statut rsvp pour chaque événement.Facebook - meilleure façon de faire FQL "se joindre" à event et membre_membre?
Je peux obtenir les événements de l'utilisateur bien, mais pour l'instant, je recherche le statut rsvp pour chaque événement un à la fois, et l'application arrive à expiration pour les personnes ayant un grand nombre d'événements.
Je reçois des événements de l'utilisateur ainsi:
$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";
Cette partie fonctionne bien.
Et voici comment j'obtenir le statut de rsvp pour chaque événement, un à la fois:
$fql = "SELECT rsvp_status
FROM event_member
WHERE uid = $user
AND eid = '$event_id'";
Cela fonctionne aussi bien sur une base événement par événement, mais les temps de page de l'application lorsque l'utilisateur a beaucoup d'événements puisque chaque événement doit être recherché à chaque fois. Avec un SQL normal, je pourrais facilement le faire avec une jointure, mais les jointures ne sont pas autorisées dans FQL.
Une solution possible est de les faire en lots en boucle à travers chaque possibilité de rsvp_status, comme ceci:
$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";
Cela réduirait le nombre de FQL appelle au nombre de rsvp_possibilities (trois je pense), mais idéalement, je préfère le faire dans un appel FQL.