2012-02-26 177 views
2

我试图通过fql查询从facebook获取数据。 我想要做的事情之一是每次打电话都要记录一个记录。我试图通过'LIMIT [start],[end]'命令来做到这一点,它假设将这些数字之间的记录返回给我。而不是获取[结束] - [开始]记录,这是假设要返回的记录总数。我得到了随机数量的记录,我已经检查过,我可以确定我没有试图获得更多的记录。Fql限制返回的结果比预期的要少

LIMIT例如:

http://graph.facebook.com/fql?q=SELECT actor_id, message,description FROM stream WHERE source_id =5878435678 Limit 2,10 

这个假设返回7条记录(计数从0开始),我只得到3条记录。 有趣的thig是当我写的而不是10 50我有26个记录。

有人可以帮助我找到一种方法如何获得我要求的确切数量的记录。 超前战车!

回答

12

Facebook工程师的这篇博文解释了这种现象。

http://developers.facebook.com/blog/post/478/

下面是解决你的问题的一部分...

您可能注意到,返回的结果的数量并不总是 等于指定的“限制”。这是预期的行为。查询 参数应用于我们的结尾,然后检查返回的 结果是否对查看者可见。正因为如此,您可能会得到比预期更少的结果,可能是 。

以下是博客条目的最好的部分...

这也意味着,当你手动构建自己的查询, 你应该知道,有一些表和连接,如果你是 指定一个“偏移量”参数,您指向 的第N个结果可能无法返回到您的结果中(如上面的图像的第2步 中的第3个结果)。这可能会导致分页困难和混乱。

大声笑,你在杀我Facebook!为什么不把它变得直截了当并且一致,而不是“困难和困惑”。?!?!?

+0

+1,我之前阅读此贴,但无法立即找到它 – ifaour 2012-02-26 06:52:32

+0

@Why:速度。首先进行“正常”提取并THEN筛选使查询缓存更容易一些(轻描淡写)。否则,他们要么A必须提取不可预见的数据量,要么B让数据库层为每个可能的权限组合执行特定的查询。所以,我们只能应付这一点。 :) – 2012-02-26 17:36:10

+0

不,大多数SQL系统可以以令人难以置信的速度正确处理它,并且会获取所需的正确数据量。为什么FQL系统不能仅仅是一个程序员/设计决策,Facebook似乎基于该博客条目而感到“自豪”。如果我是这个公然使用的“捷径”的FQL团队的开发人员,我会感到羞耻。 – DMCS 2012-02-26 17:54:51