2010-11-25 1 views
2
SELECT pid FROM photo WHERE me() and $otherPerson IN (SELECT subject FROM photo_tag WHERE pid=pid) ORDER BY created DESC LIMIT 1 

두 명의 사용자가 태그를 추가 한 사진을 얻으 려합니다 ($ otherPerson이 사용자 ID로 대체 됨). 이 쿼리는 다음을 반환합니다.두 사람의 사진을 가져 오는 FQL 문 (쿼리 할 수없는 오류 쿼리)

604 Your statement is not indexable. The WHERE clause must contain an indexable column. Such columns are marked with * in the tables linked from http://wiki.developers.facebook.com/index.php/FQL_Tables 

어떻게하면이 작업을 할 수 있습니까?

UPDATE :

나는 현재이 쿼리가 작동했지만 대해 갈 수있는 더 좋은 방법이 생각 나는 느낌.

SELECT pid, src_big FROM photo 
WHERE pid IN (
       SELECT pid FROM photo_tag 
       WHERE subject=$otherGuy 
       AND pid in (
           SELECT pid FROM photo_tag WHERE subject=me() 
          ) 
       ) 

답변

3

트릭을해야합니다.

"SELECT pid FROM photo_tag WHERE subject = <friend_user_id>" 
: -
SELECT pid, src_big 
FROM photo 
WHERE pid IN(
    SELECT pid 
    FROM photo_tag 
    WHERE subject = me() 
) 
AND pid IN(
    SELECT pid 
    FROM photo_tag 
    WHERE subject = <friend_user_id> 
) 
+0

thanks christophe! 이것은 작동하지만 X의 사진을 100 페이지 정도만 가져 오는 것입니다. 모든 사진을 가져 오는 방법이 있습니까? "limit 99999"설정이 작동하지 않습니다. 감사! – Rees

0

무엇에 대해 : 또한

SELECT pid 
    FROM photo 
    WHERE me() IN (SELECT subject 
        FROM photo_tag 
        WHERE pid=pid) 
    AND $otherPerson IN (SELECT subject 
          FROM photo_tag 
          WHERE pid=pid) 
ORDER BY created DESC 
    LIMIT 1 

, 무엇 pid=pid 수단?

+0

을하지만 난 방법을 잘 모르겠어요 하기 위해서 FQL/SQL –

+0

에서 여전히 색인 할 수없는 오류가 발생합니다. ( –

0

내가 다른 솔루션을 시도하고 문제 다 퉜다 친구가 자신의 사진에 액세스하는 응용 프로그램을 허용하는 자신의 개인 정보 보호 설정을 설정 한 경우, 다음 FQL 쿼리는 빈 테이블을 반환합니다

내가 대신 다음 multiquery 사용하여이 문제를 해결 : 나는`photo_tag`의 pid는`photo`의 PID와 동일한 photo_tags을 선택하기 위해 노력하고있어

"query1" : "SELECT subject, pid FROM photo_tag WHERE pid IN (SELECT pid FROM photo_tag WHERE subject=me())" 
"query2" : "SELECT pid FROM #query1 WHERE subject= <friend_user_id>" 
+0

Doh, 나는 곧 이야기했다. 원래의 질문에서 업데이트 된 솔루션은 저에게도 효과적입니다. –