0

Facebook PHP SDKを使用して、ユーザーが気に入ったページを取得しました。

$liked = $facebook->api('/me/likes');

JSONをデコードした後、次のような出力配列を取得します。

Array ( 
[data] => Array ( 
[0] => Array ( [category] => Book [name] => Steve Jobs by Walter Isaacson [id] => 152707268157952 [created_time] => 2012-12-05T15:10:14+0000 ) 
[1] => Array ( [category] => Internet/software [name] => Evernote [id] => 30670583128 [created_time] => 2012-11-24T04:39:25+0000 ) 
[2] => Array ( [category] => Product/service [name] => HTC [id] => 112176482203770 [created_time] => 2012-11-15T06:36:59+0000 )
....
....
....
)

ユーザーが気に入ったすべてのページのカテゴリと名前をデータベーステーブルに保存したいと思います。2人のユーザーを効率的に比較し、お互いに好きなページを取得できるように保存したいと思います。例:ユーザーが他のユーザーと共通の本を比較したい場合、ユーザーは相互に好きな本を入手できます。

後で比較に使用できるように、配列のデータをテーブルに保存するにはどうすればよいですか。

4

1 に答える 1

2

liked_pages保存するすべてのデータの列を含むテーブル()を作成します。

  • ユーザーID
  • カテゴリー
  • 名前
  • id
  • created_time

配列のデータをこのテーブルに格納します。

次に、2つのuser_id(この例では、12)を指定して、相互に好きなページを見つけるには、次のようにします。

SELECT id FROM liked_pages
WHERE user_id IN (1,2)
GROUP BY id
HAVING COUNT(id) = 2

これを拡張して、特定のカテゴリ(たとえば「本」)で相互に好きなページのみを検索する場合は、where句を追加しますcategory = 'books'

編集:

コメントで尋ねている質問を拡張するには、データベーステーブルの行ごとに1つのレコードのみを保存することをお勧めします。これにより、データベースエンジンが最適化されている、データを取得するときに関連するレコードを検索および並べ替えることができます。

これに代わる方法は、配列をシリアル化し、ユーザーごとに1つのエントリのみを格納してから、データベースから配列を取得し、シリアル化を解除してから、PHPですべての検索/並べ替えを実行することですが、これは効率が低下します。

于 2012-12-08T10:07:06.023 に答える