4

我已经尝试使用 FQL 和 Graph API 来完成此操作。

我首先尝试了这个 FQL 调用:

$fql = "SELECT pic, src_big FROM photo WHERE pid IN (SELECT pid FROM photo_tag WHERE subject = me())";

从这里我收到的结果包括包含给定用户标签的图像(在本例中:me())。但是,这些图像可能包括不止一个标记的用户。我希望通过使用 SQL HAVING 子句和 COUNT (http://stackoverflow.com/a/3710501/1406986) 来解决这个问题。不幸的是,我认为 FQL 不支持此功能,因为当我尝试此调用时:

$fql = "SELECT pic, src_big FROM photo WHERE pid IN (SELECT pid FROM photo_tag HAVING COUNT(subject) = 1";

我收到了来自 Facebook 的错误消息。如果 FQL 实际上支持此功能,请纠正我。

为了尝试使用 Graph API 解决这个问题,我提出了以下请求:

$userPics = $facebook->api('/me/photos');

这将返回用户的照片,但是,从这一点开始,我被迫遍历每张照片,寻找只包含一个标签的照片。我发现这是不切实际的,例如,如果我需要为用户的每个朋友找到只包含他们的朋友而不包含其他朋友的图像。为此,我需要单独检索他们朋友的所有照片,然后遍历所有照片。

我仍在寻找一个好的解决方案。请发表您的想法和解决方案。

4

1 回答 1

2

好吧,我已经设法为这个问题创建了一个 FQL,但它一点也不漂亮

SELECT object_id, pid, src_big FROM photo WHERE pid IN
  (SELECT pid FROM photo_tag 
    WHERE pid IN (SELECT pid FROM photo_tag WHERE subject = me()) 
    AND NOT (pid IN 
      (SELECT pid  FROM photo_tag WHERE pid IN 
        (SELECT pid FROM photo_tag WHERE subject = me()) 
      AND subject != me())
    )
  )

解释:

第一个很简单,获取当前用户的 photo_tags

SELECT pid FROM photo_tag WHERE subject = me()

下一张我加入了同一张桌子,但这一次我想要我和某人在一起的照片

SELECT pid  FROM photo_tag WHERE pid IN 
  (SELECT pid FROM photo_tag WHERE subject = me()) 
AND subject != me()

我再次加入同一张桌子(是的 3 次加入同一张桌子),但这次我想要我作为主题的 photo_tags 并且不在我之前得到的列表中(我和某人作为主题的照片) ,因此此查询返回所有 photo_tags,其中用户是该照片中唯一被标记的人

SELECT pid FROM photo_tag 
WHERE pid IN (SELECT pid FROM photo_tag WHERE subject = me()) 
   AND NOT (pid IN 
     (SELECT pid  FROM photo_tag WHERE pid IN 
        (SELECT pid FROM photo_tag WHERE subject = me()) 
      AND subject != me())
   )

查询的最后一个添加只是从照片的照片表中获取信息的连接,我是唯一被标记的人

SELECT object_id, pid, src_big FROM photo WHERE pid IN
  (SELECT pid FROM photo_tag 
    WHERE pid IN (SELECT pid FROM photo_tag WHERE subject = me()) 
    AND NOT (pid IN 
      (SELECT pid  FROM photo_tag WHERE pid IN 
        (SELECT pid FROM photo_tag WHERE subject = me()) 
      AND subject != me())
    )
  )
于 2014-02-24T17:42:58.247 回答