0

行のリストを並べ替えて、ユーザーの Facebook の友達を最初に配置する方法が必要です。

それを行う方法はありますか?どのアプローチに従うべきですか?

私は Facebook Connect を使用したことがないので、これは単なる仮定の質問です。すぐに使用する予定です。

ユーザーが検索するたびにFacebookの友達リストを取得する必要があります(リストが生成されます)。次に、テーブルにすべてのユーザーの facebook_uid を保存しますか?

しかし、Facebookの友達が最初で、「見知らぬ人」が後で表示されるようにするにはどうすればよいですか?

私のテーブルは、たとえば次のようになります。

id - facebook_uid - text
1  - 1111111      - lorem ipsum.....
2  - 2222222      - something else....
3  - 3333333      - third!!!

したがって、たとえば 1111111 と 3333333 が私の友人である場合、返される ID は (正しい順序で) 1、3、2 になります。

SQL (または PHP ロジック) でそれを注文するにはどうすればよいですか?

4

3 に答える 3

0

Facebook グラフはfqlを使用できます。SQLをベースとしていますが、欠落などの制限がありますNOT IN()。取得したすべてのfacebook_idを tablefriendで実行することにより、クエリを通じてそれらが友人であるかどうかを確認できます。

これは、すべての ID を保存することを前提としています。検索して 10 件の結果が得られたとします。friend次のように -tableを介してこれらの ID をすべて実行します。

SELECT uid2 FROM friend WHERE uid1 = me() AND uid2 IN ({$search_user_1}, {$search_user_1}, ...)

返された uid2 は、明らかに特定の人の友達です。

アップデート:

fql がこれを処理できるUNIONとは思えませんsubqueries。しかし、私の解決策は依然として同じままです。

行を抽出し、Facebook の API を介して fql を実行し、一致を比較します。それらが一致する場合は、それらを配列に入れることができ、$friendsそう$not_friendsでない場合$users = array_merge($friends, $not_friends)はソートされます。想像力を使って。

これ、または最初に fql を実行して現在のユーザーの友達を取得し、次にアクセスする日/時間/ページごとに別のテーブルの独自のデータベースに追加します。次に、 a を実行して、JOIN友達かどうかを確認します。

于 2012-10-23T10:12:42.090 に答える
0

したがって、たとえば 1111111 と 3333333 が私の友人である場合、返される ID は (正しい順序で) 1、3、2 になります。

SQL (または PHP ロジック) でそれを注文するにはどうすればよいですか?

これで十分だと思います(MySQLの場合):

… ORDER BY IF(facebook_uid IN (1111111,3333333), 1, 0) DESC

これにより、レコードのfacebook_uidが指定されたリストにある場合は「ソート値」が1になり、そうでない場合は0になります。DESCending で並べ替えると、1 の値が 0 の値よりも前になります。

コンマで区切られた友人 ID の実際のリストを IN 演算子の括弧に挿入することは大したことではありません。

于 2012-10-23T11:25:56.587 に答える