Facebook - La meilleure façon de faire FQL «rejoindre» avec Event et Event_Member?

StackOverflow https://stackoverflow.com/questions/1045842

  •  20-08-2019
  •  | 
  •  

Question

Dans une application Facebook, j'ai besoin d'obtenir les événements d'un utilisateur pour une plage de dates et son statut RSVP pour chaque événement.

Je peux bien obtenir les événements de l'utilisateur, mais pour le moment, je recherche le statut RSVP pour chaque événement un à la fois, et l'application est en train de chronométrer les personnes avec un grand nombre d'événements.

J'obtiens les événements de l'utilisateur de cette façon:

$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'obtiens le statut RSVP pour chaque événement, un à la fois:

$fql = "SELECT rsvp_status 
        FROM event_member 
        WHERE uid = $user
          AND eid = '$event_id'";

Cela fonctionne également très bien sur une base événementielle, mais la page de l'application met en œuvre de nombreux événements, car chaque événement doit être recherché à chaque fois.

Avec SQL normal, je pourrais facilement le faire avec une jointure, mais les jointures ne sont pas autorisées dans FQL.

Une solution possible consiste à les faire par lots en faisant une boucle à travers chaque possibilité 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 d'appels FQL au nombre de RSVP_Possibilités (trois je pense), mais idéalement je préfère le faire en un seul appel FQL.

Était-ce utile?

La solution

Il n'y a pas de moyen de faire une jointure mais vous pouvez utiliser FQL.Multiquey Pour laver vos 4 requêtes en un seul appel. Les 4 requêtes seraient 1 chacune pour le 4 Réponses d'événements possibles: assister, incertain, refusé et non_répliquée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top