FQL多查询优化

时间:2010-02-10 10:44:13

标签: sql facebook facebook-fql fql.multiquery

我试图了解是否有可能使用FQL多查询而不是多个API调用。

这是我的代码:

var queries : Object = {

"user_list":"SELECT uid2 FROM friend WHERE uid1 = "+uid

,"event_id":"SELECT eid, start_time, end_time, location, pic, name FROM event 
WHERE eid IN (SELECT eid FROM event_member 
WHERE uid IN (SELECT uid2 FROM #user_list) 
AND rsvp_status='attending') AND start_time > " + nowSecs + " 
AND start_time < " + (nowSecs + 2500000) + " ORDER BY start_time ASC LIMIT 20"

"user_name":"SELECT name FROM user 
WHERE uid IN (SELECT uid FROM event_member 
WHERE eid IN (SELECT eid FROM #event_id) 
AND uid IN (SELECT uid2 FROM #user_list) AND rsvp_status='attending')"
 };

目前在我的'event_id'查询中提取的结果太多,我目前获得了存储在'user_list'查询中的每个人的完整事件列表,我理想情况下只想获得1个事件每个人,然后对这些结果进行排序。我似乎无法做到这一点,使用LIMIT我总共得到1个结果,但不是每个人都有。

此外,更重要的是,我只想在'user_name'查询中为每个事件提供一个结果,此时我有时会得到多个参与同一事件的成员,这会导致问题,因为我无法匹配一旦收到结果,用户就会以相应的事件命名。我也注意到,如果同一个用户要去 'event_id'中包含两个不同的事件,结果中只有一个名称实例,这也是不可取的。

目前我正在进行20次API调用,一旦我获得'event_id'结果,然后对返回的数据进行排序,这实际上会减慢我的应用。

有人可以建议我如何实现我的目标,从而优化查询吗?

很抱歉这篇长篇文章,但这已经有好几天了!

由于

1 个答案:

答案 0 :(得分:0)

从阅读中我可以看出,你想得到:

  1. 所有朋友的列表,
  2. 每个朋友说他们参加过的最近一次活动。
  3. 这与提出的here问题非常相似,但他会为每个项目搜索2个结果,而您只搜索一个。