在FQL中按名称搜索人员

时间:2010-12-07 18:46:21

标签: facebook facebook-fql

我正在尝试使用Facebook API按名称功能搜索人物。

我正在尝试这个FQL查询:

SELECT uid, username, name, pic_square FROM user WHERE strpos(name, 'Alfredo Artiles') >= 0

但是我得到了一个“你的语句不可索引.WHERE子句必须包含一个可索引的列。”错误。

我还尝试添加“和uid> 0”条件,但这也不起作用。

有什么想法吗?

4 个答案:

答案 0 :(得分:6)

SELECT uid, username, name, pic_square FROM user WHERE contains('Alfredo Artiles')

我不知道它为什么会起作用,因为它违反了“WHERE中的至少和可索引字段”,但确实如此。

编辑:我在这里阅读:link

答案 1 :(得分:4)

稍后修改

好的,抱歉有关strpos的错误,我上次检查fql文档时并没有记住它的存在。关于它的事情是它可以在某些情况下使用。您需要在where子句中使用primar可索引列,并使用strpos创建第二个条件(至少这是我成功使用它的方式)。例如:

SELECT actor_id, message FROM stream WHERE source_id = me() AND strpos(message, 'stuff') > 0 limit 50

我希望这能澄清一点这个功能的混乱。

答案 2 :(得分:0)

你需要在facebook用户表中的where子句获取详细信息中指定uid。我们没有得到所有用户的详细信息。这里得到当前登录用户的详细信息

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

答案 3 :(得分:0)

是的,你可以!!!

尝试在配置文件表中搜索,而不是在用户表中搜索。在配置文件表中,name字段是可索引的,因此您的语句只需要改变一点:

SELECT id, username, name, pic_square FROM profile WHERE contains('alfredo artiles') and type='user'

包含不区分大小写,而strpos是。你仍然可以使用lower和strpos,但你也会遇到特殊字符的问题。包含是解决方案。

您可以在facebook doc中找到个人资料表的所有字段:

希望它有所帮助!