我正在构建一个使用Facebook好友用户图片的产品。我在SO上找到了多个示例,通过过滤专辑和用户朋友列表来过滤照片,如下所示:
SELECT pid, link, owner
FROM photo
WHERE aid IN
(SELECT aid FROM album WHERE owner IN
(SELECT uid2 FROM friend WHERE uid1=me())
)
但为什么我不能跳过专辑收藏?以下应该可以工作,但在Graph API Explorer中运行它永远不会返回结果(如永不发生的超时):
SELECT pid, link, owner
FROM photo
WHERE owner IN (SELECT uid2 FROM friend WHERE uid1=me())
AND created > strtotime("10 February 2013")
ORDER BY created DESC
我使用的令牌肯定有'user_photos'和'friends_photos'。使用常规图形资源管理器也具有相同的行为,没有显示任何结果:
这是我的逻辑错误,Facebook平台的错误,还是有什么奇怪的事情发生在这里?
答案 0 :(得分:1)
说到:
SELECT pid, link, owner
FROM photo
WHERE owner IN (SELECT uid2 FROM friend WHERE uid1=me())
AND created > strtotime("10 February 2013")
ORDER BY created DESC
第四,即使您的第二个查询不会超时,如果它可以提供超过5000个结果,此查询也不会提供用户朋友的所有照片。因为这个查询:
SELECT pid, link, owner
FROM photo
WHERE owner=USER_ID
仅提供用户的最后100张照片,而用户可以拥有2000张照片。
至少,我们不必更正您的查询,但我们应该尝试创建一个新查询。我们的目标不是在制作复杂的查询时尽可能少地进行查询,而是要做出明确有效的查询。
SELECT pid, link, owner
FROM photo
WHERE owner=USER_ID
AND created > strtotime("10 February 2013")
ORDER BY created DESC
LIMIT 5000 OFFSET 0
现在我们不再拍100张照片,而是5000张!
SELECT uid2 FROM friend WHERE uid1=me() LIMIT 5000
用户的最大朋友数量确实是5000。
现在,您所要做的就是:
OFFSET
增加5000的同时发出另一个请求!现在您一定会收到所有用户朋友的照片!此外,将此过程分解为多个较小的请求并不是一件坏事;您将能够知道查询的进度,您可以将其呈现为AJAX中的进度条。这可能是一件好事,因为它需要很多的时间!