Facebook - أفضل طريقة للقيام بـ FQL "الانضمام" مع Event و Event_Member؟
-
20-08-2019 - |
سؤال
في تطبيق 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 واحدة.
المحلول
ليست هناك طريقة للانضمام ولكن يمكنك استخدامها fql.multiquery لدُعّد استفساراتك الأربعة في مكالمة واحدة. سيكون الاستعلامات الأربعة 1 لكل منهما 4 ردود الأحداث المحتملة: حضور ، غير متأكد ، رفض ، و not_replied.