2011-04-26 95 views
1

我試圖做一個Facebook FQL Multiquery(通過JS SDK FB.api調用)爲10個隨機Facebook朋友中的每個朋友加載一張照片,他們已被標記(又名「顯示10個隨機朋友和他們的照片「)。下面是查詢我的Javascript數組:在FQL中爲10個隨機Facebook朋友中的每個朋友找到一張照片?

var queries = { 
      q1:"SELECT uid, name FROM user WHERE uid IN (Select uid2 from friend where uid1 = " + user_id 
       + " order by rand() limit 10) ", 
      q2: "SELECT pid, subject from photo_tag where subject in (SELECT uid from #q1) limit 10", 
      q3:"SELECT src from photo where pid in (SELECT pid from #q2)"}; 

什麼,我試圖做的事:

  1. 查詢1:獲取用戶的10周隨機的朋友的用戶ID和姓名。
  2. 查詢2:獲取phototags其中用戶ID匹配來自查詢的帶照片的身份證和主題名稱1.
  3. 查詢3:從匹配那些在查詢照片的圖片src 2.

問題是我沒有辦法在查詢2中選擇用戶的DISTINCT記錄。也就是說,我不能讓Facebook爲每個用戶返回一張照片。現在,它是任意的,所有10行可以是同一用戶的不同照片標籤。

我可以在Javascript中做一些循環,併爲每個匹配用戶的圖片做一個單一的FQL查詢,但這似乎是錯誤的。有關如何有效執行此操作的其他建議,最好直接在FQL中進行?

謝謝!

回答

2

嗯,我解決了這一段時間後,並關閉此完整性。

我所要做的並不是在單一的多重查詢中完成所有工作。我不得不先做一個查詢來檢索一些隨機的朋友,然後做一個多重查詢,我們爲這些朋友中的每一個加載一張隨機的照片。

FB.api(
     { 
      method: 'fql.query', 
      query: "SELECT uid, name FROM user WHERE uid IN (Select uid2 from friend where uid1 = " + user_id 
       + " order by rand() limit 8) " 
     }, function (response) { 
      var queries = {}; 
      for (x in response) { 
       if (typeof photoArray[response[x].uid] == 'undefined') photoArray[response[x].uid] = []; 
       photoArray[response[x].uid]['name'] = response[x].name; 
       queries[response[x].uid] = "SELECT src_big, caption from photo where pid in (SELECT pid from photo_tag where subject =" + response[x].uid + " order by rand() limit 1) "; 
      } 

      FB.api(
       { 
      method: 'fql.multiquery', 
      queries: queries 
       }, 
       function(response) { 


        for (y in response) { 
         if (typeof response[y].fql_result_set[0] != 'undefined') { 
          photoArray[response[y].name]['image_src'] = response[y].fql_result_set[0].src_big; 
             // Do what you want with the pics 
         } 
        }