В приложении Facebook мне нужно получить события пользователя для диапазона дат и его статус rsvp для каждого события.
Я могу получать события пользователя в порядке, но в данный момент я просматриваю статус rsvp для каждого события по одному, и время ожидания приложения истекает для людей с большим количеством событий.
Я получаю события пользователя таким образом:
$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";
Эта часть работает нормально.
И вот как я получаю статус rsvp для каждого события, по одному за раз:
$fql = "SELECT rsvp_status
FROM event_member
WHERE uid = $user
AND eid = '$event_id'";
Это также отлично работает для каждого события, но время ожидания страницы приложения истекает, когда у пользователя много событий, поскольку каждое событие нужно искать каждый раз.
С обычным SQL я мог бы легко сделать это с помощью соединения, но соединения не разрешены в FQL.
Одно из возможных решений состоит в том, чтобы выполнять их партиями, перебирая каждую возможность rsvp_status, например так:
$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";
Это уменьшит количество вызовов FQL до количества rsvp_possibilities (думаю, три), но в идеале я бы предпочел сделать это за один вызов FQL.