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 )
....
....
....
)

我想将用户喜欢的每个页面的类别和名称存储到数据库表中。我想以一种可以有效比较两个用户并获得相互喜欢的页面的方式存储它。例如:当一个用户想和另一个用户比较共同的书籍时,用户可以得到相互喜欢的书籍。

我应该如何将数组中的数据存储到表中,以便以后可以使用它进行比较。

4

1 回答 1

2

liked_pages为您希望存储的所有数据创建一个包含列的表 ( ):

  • 用户身份
  • 类别
  • 姓名
  • ID
  • 创建时间

将数组中的数据存储在此表中。

然后给定两个 user_ids(在本例中,假设为12),要找到相互喜欢的页面,您可以执行以下操作:

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

如果您想将其扩展为仅在某个类别中查找相互喜欢的页面(比如说“书籍”),您将添加一个额外的 where 子句category = 'books'

编辑:

为了扩展您在评论中提出的问题,最佳做法是在数据库表中每行仅存储一条记录,因为这允许您在检索数据时搜索和排序相关记录,这是数据库引擎优化的。

另一种方法是序列化数组并为每个用户只存储一个条目,然后从数据库中检索数组,对其进行反序列化,然后在PHP中执行所有搜索/排序,但这会降低效率。

于 2012-12-08T10:07:06.023 回答