如何将用户喜欢的页面数据存储到Mysql数据库中

时间:2012-12-08 10:00:18

标签: php mysql facebook

我使用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 )
....
....
....
)

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

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

1 个答案:

答案 0 :(得分:2)

创建一个表(liked_pages),其中包含您要存储的所有数据的列:

  • USER_ID
  • 类别
  • 名称
  • ID
  • CREATED_TIME

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

然后给出两个user_id(对于此示例,假设为12),要查找相互喜欢的页面,您可以执行以下操作:

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

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

修改

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

替代方案是serialize数组并且每个只存储一个条目 用户然后从数据库unserialize检索数组,然后在PHP中进行所有搜索/排序,但这样效率会降低。