【问题标题】:Search for people by name in FQL在 FQL 中按姓名搜索人员
【发布时间】:2010-12-07 18:46:20
【问题描述】:

我正在尝试使用 Facebook API 开发按姓名搜索人的功能。

我正在尝试这个 FQL 查询:

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

但我收到“您的语句不可索引。WHERE 子句必须包含可索引列。”错误。

我也尝试添加“and uid > 0”条件,但这也没有用。

有什么想法吗?

【问题讨论】:

    标签: facebook facebook-fql


    【解决方案1】:
    SELECT uid, username, name, pic_square FROM user WHERE contains('Alfredo Artiles')
    

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

    编辑:这是我读到的地方:link

    【讨论】:

    • 您是如何到达您分享的链接的?你也知道这里的“包含”功能是什么吗?哪些字段/字段是搜索?
    • 对不起,我很久没有从事那个项目了,我不记得了。可能我只是用谷歌搜索了
    【解决方案2】:

    稍后编辑

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

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

    我希望这能澄清一点与此功能的混淆。

    【讨论】:

    • FQL 有 now()、strlen()、substr() 和 strpos() 在这里查看developers.facebook.com/docs/reference/fql
    • 您的查询只返回完全匹配
    • 抱歉 strpos 出现错误,请重新检查我的答案以查看我编辑的内容
    • 全文搜索?像mysql全文?不,这是不可能的。
    • 对于不区分大小写的搜索,请使用 strpos(lower(name), "input") >=0 并确保您输入的内容小写。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      是的,你可以!!!

      尝试在配置文件表中搜索,而不是在用户表中搜索。在配置文件表中,名称字段是可索引的,因此您的语句只需稍作更改:

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

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

      你可以在facebook doc找到profile表的所有字段:

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 2013-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        • 2013-04-14
        • 2015-12-01
        • 2023-03-19
        • 2021-05-14
        相关资源
        最近更新 更多