0

我正在尝试在 FQL 查询中创建 OR 子句。

这是我的查询:

SELECT post_id, message, permalink, likes, actor_id, created_time FROM stream  WHERE 
(source_id = xxx1 AND message != '' AND actor_id = xxx2) 
OR 
(source_id = xxx2 AND actor_id = xxx1) 

在全球范围内,我想检索 2 个 Facebook 用户之间的所有消息。如果我删除 OR 子句,我确实以一种方式接收消息,但添加 OR 会删除我拥有的每条消息,就好像 '(' 不起作用。

如果您需要测试此查询,请继续:http: //developers.facebook.com/tools/explorer 并使用 read_stream 权限创建和访问令牌(扩展权限)

我也想使用 UNION,但 FQL 不支持它。也许我可以使用 FQL 多个查询,但我仍然被 UNION 丢失阻止。

谢谢您的帮助。

4

2 回答 2

2

您可以使用子查询来实现所需的结果,如下所示:

SELECT post_id, message FROM stream 
WHERE 
    (
      post_id in (select post_id from stream where actor_id = uid0 and source_id  = uid1) 
    or  
      post_id in (select post_id from stream where actor_id = uid1 and source_id  = uid0)
    ) 
    and message != ''
于 2012-07-19T19:34:00.580 回答
0

complex857 提供的答案是正确的,但我想补充一些信息。要使此查询起作用,您必须在查询中添加一个 LIMIT / OFFSET 子句。

SELECT post_id FROM stream
    WHERE 
        (post_id IN (SELECT post_id FROM stream WHERE source_id = uid0 AND actor_id = uid1 LIMIT 1000 OFFSET 0)
            OR 
        post_id IN (SELECT post_id FROM stream WHERE source_id = uid1 AND actor_id = uid0 LIMIT 1000 OFFSET 0))
    AND message != '';

希望这会有所帮助:)

于 2012-07-20T19:11:01.813 回答