1

アプリケーションの2人のユーザー間の類似点を見つけようとしています。以下のクエリでinterests属性のみをテストしましたが、正常に機能します。

SELECT interests FROM user WHERE uid=me() AND interests IN 
(SELECT interests FROM user WHERE uid = $targ_id)

これを拡張して、次の属性の類似点を見つけたいと思いますmovies, tv, music, books。ステートメントの変更は簡単ですが、句SELECTの実行方法がわかりません。INこれは私がやろうとしたことです:

    SELECT interests, movies, tv, music, books FROM user WHERE uid=me() 
AND (interests, movies, tv, music, books) IN 
    (SELECT interests, music, tv, movies, books FROM user WHERE uid = $targ_id)

これにより、次のエラーが発生します。

{
  "error": {
    "message": "(#601) Parser error: unexpected ',' at position 82.",
    "type": "OAuthException",
    "code": 601
  }
}

このFQLクエリを調整して機能させるにはどうすればよいですか?

4

2 に答える 2

2

INFQL演算子を使用して2人のユーザーの関心を比較することはできないと思います。フィールド、、、interestsなどmoviesbooks文字列であり、配列ではありません。strpos()またはのような文字列演算を使用する必要がありますsubstr()。FQLには操作がありませんLIKE

各結果をコンマで分割して相互に比較する巨大なFQLクエリを作成することもできますが、これらをスクリプトに取り込んでバックエンドで実行する方がはるかに簡単だと思います。そうしないと、私moviesが「ジョーズ、トロン」で、映画が「ジョーズ、スターウォーズ、トロン」であり、文字列が異なるために一致しないという状況になってしまいます。

于 2012-08-27T16:57:18.467 に答える
0

アクセス許可と拡張アクセス許可を構成しようとしましたか?

リクエストにエラーがあります。closeで複数の列を使用することはできませんAND。多分あなたはこれを試してみるべきです:

SELECT interests, movies, tv, music, books FROM user 
WHERE uid=me() 
AND (interests) IN (SELECT interests FROM user WHERE uid = $targ_id) 
AND (movies) IN (SELECT movies FROM user WHERE uid = $targ_id) 
AND (tv) IN (SELECT tv FROM user WHERE uid = $targ_id) 
AND (music) IN (SELECT music FROM user WHERE uid = $targ_id)
于 2012-08-27T16:06:03.147 に答える