Domanda

In un'app di Facebook ho bisogno di ottenere gli eventi di un utente per un intervallo di date e il suo stato RSVP per ogni evento.

Posso ottenere bene gli eventi dell'utente, ma al momento sto cercando lo stato RSVP per ogni evento alla volta, e l'app sta scattando per le persone con un gran numero di eventi.

Sto ricevendo gli eventi dell'utente in questo modo:

$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";

Questa parte funziona bene.

Ed ecco come sto ottenendo lo stato RSVP per ogni evento, uno alla volta:

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

Questo funziona bene anche su base per evento per evento, ma la pagina dell'app si stacca quando l'utente ha molti eventi poiché ogni evento deve essere alzato ogni volta.

Con il normale SQL, potrei facilmente farlo con un join, ma i join non sono ammessi in FQL.

Una possibile soluzione è farli in batch, passando attraverso ogni possibilità di RSVP_STATUS, come questa:

$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";

Ciò ridurrebbe il numero di chiamate FQL al numero di RSVP_Possibilities (tre credo), ma idealmente preferirei farlo in una chiamata FQL.

È stato utile?

Soluzione

Non c'è un modo per fare un join, ma puoi usare Fql.mulquery Per rallentare le tue 4 query in una singola chiamata. Le 4 query sarebbero 1 ciascuna per il 4 possibili risposte degli eventi: frequentare, insicuro, rifiutato e not_replied.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top