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

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

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

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

最佳答案

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

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

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

然后给定两个 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 中进行所有搜索/排序,但这会降低效率。

关于php - 如何将用户喜欢的页面数据存储到Mysql数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13776421/

相关文章:

java - 在 Java 中处理 MySQL 日期时间和时间戳

iphone - 新的 fbconnect Api 错误?

css - 我的 Facebook 应用程序的大小有问题

php - Magento 自定义 ACL 默认返回 TRUE

PHPunit 忽略设置方法中的异常

用于 PHPSESSID 的 PHP 5 Hashalgorythm

php - 使用 spl_autoload() 无法加载类

Mysql 索引和连接

mysql - 如果另一行包含相同的列数据,则仅选择所需的行

facebook - 如何使用 facebook api connect 获取用户国家/地区名称?