2012-01-29 50 views
1

這裏是我的查詢:FQL獲取好友列表錯誤

fql?q=SELECT uid, name, pic_square, sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) 

,這裏是錯誤:

(#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://developers.facebook.com/docs/reference 

這裏是js代碼:

var query = encodeURI("SELECT uid, name, pic_square, sex FROM user WHERE uid = me() OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())"); 
    FB.api('fql?q=' + query, function(response) { 
     console.dir(response); 
     if(! jQuery.isEmptyObject(response)&& ! jQuery.isEmptyObject(response.data)) { 
      var maleList = $('#male-list'); 
      var femaleList = $('#female-list'); 
      for (var friend in response.data) { 
       var item = STValentines.buildFriendItem(friend); 
       if (friend.sex === 'male') 
        maleList.append(item); 
       else 
        femaleList.append(item); 
      } 
     } 
    }); 

它是常見的問題?我能做些什麼嗎? 有沒有任何散步?謝謝你的幫助

+0

這是非常奇怪..使用[圖形API瀏覽器(https://開頭開發商。 facebook.com/tools/explorer?method=GET&path=fql%3Fq%3DSELECT%20uid%2C%20name%2C%20pic_square%2C%20sex%20FROM%20user%20WHERE%20uid%20IN%20(SELECT%20uid2%20FROM% 20friend%20WHERE%20uid1%20%3D%20me()\)) - 我**能夠**從這個查詢中獲取數據。此查詢是正確的,問題可能是暫時的。 – Lix 2012-01-29 22:19:40

+0

如果問題仍然存在,您應該反抗地向Facebook提交一個錯誤:https://developers.facebook.com/bugs – Lix 2012-01-29 22:22:03

+0

它只會在我的應用程序中使用javascript sdk。使用圖形API瀏覽器不會產生任何錯誤 – gruber 2012-01-29 22:33:41

回答

1

這可能是一個轉義字符的問題。
你應該嘗試用你的FQL查詢
遞給給JavaScript SDK前escape()方法:

var escapedFQLQuery = escape('SELECT uid, name, pic_square, sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())'); 
//escapedFQLQuery now is : "SELECT%20uid%2C%20name%2C%20pic_square%2C%20sex%20FROM%20user%20WHERE%20uid%20IN%20%28SELECT%20uid2%20FROM%20friend%20WHERE%20uid1%20%3D%20me%28%29%29" 
FB.api(
    { 
    method : 'fql.query', 
    query : escapedFQLQuery 
    }); 
+0

這裏是結果:error_code:「601」 error_msg:「解析器錯誤:位置6處出現意外的'%'。」 – gruber 2012-01-29 22:47:53

+0

只是拋出它 - 如果你不使用任何轉義的方法會發生什麼?嘗試刪除您的電話到'encodeURI()' – Lix 2012-01-29 22:49:24

+0

如果我不使用任何內容,逃脫...然後我得到:(#604)您的聲明不可索引。 WHERE子句必須包含一個可索引列。這些列在* http://developers.facebook.com/docs/reference – gruber 2012-01-29 22:51:22