0

ストリーム テーブルから検索結果を取得すると、返されるコンポーネントの 1 つがコメントの配列です。コメント配列内のコメントのテキストに基づいて検索する方法があるかどうか疑問に思っていましたか?

これが私のクエリです。現在の形式で問題なく動作します。

    SELECT post_id、属性、メッセージ、説明、comments.comment_list.text、いいね、
     場所、パーマリンク、メッセージタグ、メッセージ、説明タグ、タイプ
    FROM ストリーム WHERE filter_key in
    (select filter_key FROM stream_filter WHERE uid=me())
    と
    (
    (strpos(lower(メッセージ), '大学フットボール') >= 0) OR
    (strpos(lower(説明), '大学フットボール') >= 0) OR
    (strpos(lower(attribution), '大学フットボール') >= 0)
    )
    created_time デスク順

返された行の 1 つのcomments.comment_list.textの結果は次のようになります。

    "コメント": {
            "コメントリスト": [
             {
                "text": "私はカレッジフットボールが大好きです"
             }、
             {
                "text": "アラバマと LSU がカレッジ フットボールを制する"
             }
             ]
    }

私の質問は、上記のmessagedescription、およびattributionと同じように、 comments.comment_list.textも検索する方法はありますか? 次のようなものを追加しようとしたとき:

    (strpos(lower(comments.comment_list.text), '大学フットボール') >= 0)

空のデータセットを取得しました (興味深いことに、エラーは発生せず、空の結果のみが表示されます)。なぜかというと、コメントの配列を反復処理し、そのテキストを取得してコメントのテキストを比較できるようにする必要があるからです。私は Facebook 側で FQL を使用してこれを行いたいと考えており、すべての結果を取得してから、それらを繰り返し処理することを避けたいと考えています。どうすればそれができるかについてのアイデアや提案はありますか?

助けてくれてありがとう!

4

1 に答える 1

2

テーブル内のcommentsフィールドはstream、コメントのサブセットのみを取得します。制限は 5 だと思います。それと、FQL によって返される配列を検索するのは簡単なはずです。そうではありません。

最善の方法は、これをマルチクエリに変換することです。#combined結果については、データのみを確認する必要があります。

{'all_posts':
   'SELECT post_id FROM stream WHERE filter_key in 
    (SELECT filter_key FROM stream_filter WHERE uid=me())',
 'commented':
    'SELECT post_id FROM comment WHERE post_id IN (SELECT post_id FROM #all_posts)
      AND (strpos(lower(text), 'college football') >= 0',
 'combined':
    'SELECT post_id, attribution, message, description, comments.comment_list.text, likes,
      place, permalink, message_tags, message,  description_tags, type
      FROM stream WHERE post_id IN (SELECT post_id FROM #all_posts) AND 
       (
        (strpos(lower(message), 'college football') >= 0) OR 
        (strpos(lower(description), 'college football') >= 0) OR 
        (strpos(lower(attribution), 'college football') >= 0)
       )
     OR post_id IN (SELECT post_id FROM #commented)
    order by created_time desc'
}
于 2012-09-17T12:53:52.510 に答える