2010-02-10 48 views
1

我想弄清楚是否可以使用FQL多查询而不是多个API调用进行操作。FQL多查询优化

这里是我的代码:

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')" 
}; 

目前有太多的结果是在我的“事项标识”查询牵强,我目前得到的事件的完整列表存储在“USER_LIST”每个人查询,我最好只想为每个人获取1个事件,然后对这些结果进行排序。我似乎无法做到这一点,使用LIMIT我总共只得到1个结果,但不是每个人。

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

目前,我有20个API调用,一旦我有'event_id'结果,然后对返回的数据进行排序,这实际上是减慢我的应用程序。

任何人都可以建议我如何能够实现我想要的,从而优化查询吗?

对不起,很长的文章,但这已经越来越我的山雀好几天!

感谢

回答

0

从我可以在通读告诉,你想:

  1. 你所有的好友列表,
  2. 最新发生的事件,每个朋友说,他们参加。

这与here提出的问题非常相似,只是他要追踪每个项目的2个结果,而您只搜索一个。

+0

不幸的是,这并没有什么帮助,因为facebook FQL语言并没有包含所有这些命令。我以某种方式解决了这个问题,但我不记得那是怎么回事,那是在二月! – x0b 2010-11-26 10:50:57