1

私は、私のアプリを最初に使用し、私との相互の友人の数が最も多い2つの基準で友人を並べ替えようとしています。FQLで2つのフィールドで並べ替える方法はありますか?

ソート基準としてmutual_friend_count*is_app_userを使用する回避策を見つけましたが、app_user = 1の場合にのみ機能し、0の場合はソートを実行しません。

元のクエリは次のとおりです。

SELECT uid, name, is_app_user, mutual_friend_count  
FROM user 
WHERE uid IN(SELECT uid2    FROM friend WHERE uid1 = me()) AND uid != me() ORDER BY (mutual_friend_count * is_app_user) DESC LIMIT 333

グラフAPI/FQLエクスプローラーで実行します。

4

1 に答える 1

2

ソート基準としてmutual_friend_count*is_app_userを使用する回避策を見つけましたが、app_user = 1の場合にのみ機能し、0の場合はソートを実行しません。

もちろん、そうではありません。fe66*0は15*0と同じソート値を与えるからです。

ただし、相互の友達数が99999を超える人がいないと仮定すると、で並べ替えることができますis_app_user * 99999 + mutual_friends_count

これにより、アプリユーザーに99999の「基本値」が与えられ、相互の友達の数が追加されます。アプリを使用しないユーザーの場合、基本値は0のままであり、相互の友達の数も追加されます。

そのため、アプリユーザーは、非アプリユーザーよりもはるかに高い並べ替え値を持ち、追加されたmutual_friends_countを考慮して、最初にランク付けされます。非アプリユーザーは、mutual_friends_countによってランク付けされますが、ソート値がはるかに低いため、アプリユーザーの後にのみランク付けされます。

少し注意が必要なのは、クエリに+記号を入力することだけです。URLを介してGraph API Explorerに渡す場合は、%2BとしてURLエンコードする必要がありますが、その一部としては表示されません。後でクエリします。しかし、結果を見ると、それでもクエリの作成にそれを使用しているようです。

こちらのクエリ例をご覧ください。

于 2012-10-08T08:42:41.547 に答える