我正在尝试使用Facebook API按名称功能搜索人物。
我正在尝试这个FQL查询:
SELECT uid, username, name, pic_square FROM user WHERE strpos(name, 'Alfredo Artiles') >= 0
但是我得到了一个“你的语句不可索引.WHERE子句必须包含一个可索引的列。”错误。
我还尝试添加“和uid> 0”条件,但这也不起作用。
有什么想法吗?
答案 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中找到个人资料表的所有字段:
希望它有所帮助!