繁体   English   中英

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

[英]How should I store the data of the liked pages by a user into Mysql database

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

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

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

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

  • 用户身份
  • 类别
  • 名称
  • ID
  • CREATED_TIME

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

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

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

如果你想扩展它只能找到特定类别中的相互喜欢的页面(比如'books'),你可以添加一个额外的where子句category = 'books'

编辑:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM