1

我希望 FQL 查询的结果仅返回其设备列表中有 iOS 设备的用户的朋友。以下查询:

SELECT uid, first_name, devices 
FROM user 
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
ORDER BY profile_update_time DESC 
LIMIT 0, 100

返回一个这样的列表:

{
  "data": [
    {
      "uid": 12345678, 
      "first_name": "John", 
      "devices": [
        {
          "os": "iOS", 
          "hardware": "iPhone"
        }
      ]
    },
    {
      "uid": 1234345678, 
      "first_name": "Pete", 
    }
}

现在我只想检索至少拥有一台操作系统为“iOS”的设备的用户。我试过包括

devices.os = "iOS"

在查询中,但这返回了错误。

这可以通过 FQL 查询实现吗?还是应该在客户端解决?

4

2 回答 2

7

刚刚发现这可能的!您可以IN仅将运算符与devices列一起使用。无需限制操作系统或硬件。

示例:所有拥有 iPhone 的朋友: 试试看

SELECT uid, name, devices FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
  AND "iPhone" IN devices
ORDER BY profile_update_time DESC 
LIMIT 0, 100

示例:所有拥有 iOS 设备(例如 iPhone 或 iPad)的朋友: 试用

SELECT uid, name, devices FROM user
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
  AND "iOS" IN devices
ORDER BY profile_update_time DESC 
LIMIT 0, 100

提示:如果您想使用此查询来构建自定义好友选择器,以向尚未安装您的 iOS 应用但拥有 iOS 设备的 Facebook 好友发送邀请,您希望在WHERE子句中包含以下内容:

AND is_app_user = 0
于 2012-09-06T12:24:23.470 回答
0

这在服务器端似乎是不可能的。该devices字段作为数组返回,FQL 似乎没有任何可以搜索数组的方法。据我所知,探索这一点的唯一方法是在客户端。

于 2012-07-30T14:26:04.427 回答