2012-01-29 48 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