2012-01-31 45 views
0

谁能告诉我,为什么这个工程:FQL像运营商

SELECT name FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me()) AND strpos(lower(name),"jo") >=0 

然而,这并不:

"SELECT url, id, type, site FROM object_url WHERE strpos(lower(url), 'sephora') >= 0" 

当我把它放在http://developers.facebook.com/docs/reference/rest/fql.query/

我得到这样的回应:

你的陈述是不可转位的。 WHERE子句必须包含一个可索引列。这些列在链接自http://developers.facebook.com/docs/reference/fql

的表格中用*标记,但是“url”确实是可索引的。

有什么想法?我已经淘到了stackoverflow但没有找到答案。

回答

1

网站不可索引,只能选择。它在这里没有*旁边的https://developers.facebook.com/docs/reference/fql/object_url/

你需要使用url或id作为可索引列,所以基本上这些需要在你的where子句中。

+0

错字...实际上它应该从一开始就是URL。编辑了这个问题。结果仍然是一样的。 – Rees 2012-01-31 22:36:54

+0

然后我的猜测是因为,顶部的例子是没有使用索引上的函数。所以WHERE使用IN(SELECT uid2 FROM friend WHERE uid1 = me())充当索引,然后使用where子句的其余部分。所以运行SELECT url,id,type,site FROM object_url WHERE url ='sephora'和strpos(lower(url),'sephora')> = 0将是一个有效的查询(尽管显然不会返回任何结果,因为url = 'sephora'不是一个完整的url),所以它看起来像你需要改变你的查询恐怕 – TommyBs 2012-02-01 08:28:43

0

FQL!= SQL你不能在任何你想要的列上找到WHERE。考虑到许多并行作家需要的性能并不令人惊讶,我的意思是,世界上每十个人中就有一个人报名参加。

第二个示例中的问题是,用作其中一个字符串函数的参数的字段失去了其可索引性。它必须是专栏本身。