4

FQLとGraphAPIの両方を使用してこれを達成しようとしました。

私はこのFQL呼び出しを試すことから始めました:

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

これから、指定されたユーザー(この場合はme())のタグを含む画像を含む結果を受け取ります。ただし、これらの画像には複数のタグ付きユーザーが含まれている場合があります。COUNT(http://stackoverflow.com/a/3710501/1406986)と一緒にSQL HAVING句を使用して、この問題を回避したいと思っていました。残念ながら、私がこの呼び出しを試みたとき、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');

これによりユーザーの写真が返されますが、この時点から、すべての写真を繰り返し処理して、タグが1つしかない写真を探す必要がありました。たとえば、ユーザーの友達ごとに、友達だけが含まれ、他の友達は含まれていない画像を見つける必要がある場合、これは実用的ではないことがわかりました。これを行うには、友達の写真をすべて個別に取得してから、すべてを繰り返す必要があります。

私はまだ良い解決策を探しています。あなたのアイデアと解決策を投稿してください。

4

1 に答える 1

2

Well I have managed to create a FQL for this problem, but it's not pretty at all

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())
    )
  )

Explanation:

The first one is pretty simple, get the photo_tags of the current user

SELECT pid FROM photo_tag WHERE subject = me()

The next one I joined the same table, but this time I wanted the photos where I was with someone

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

The I joined the same table again (yes 3 joins with same table), but this time I wanted the photo_tags where I was the subject AND that weren't on the list I got before (the photos where I was the subject with someone), so this query returns all the photo_tags where the user is the only one tagged in that photo

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())
   )

The last addition to the query was just a join to get the info from the photo table of the photos were I was the only one tagged

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 に答える