我使用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 )
....
....
....
)
我想将用户喜欢的每个页面的类别和名称存储到数据库表中。我想以这样的方式存储它,以便我可以有效地比较两个用户,并获得相互喜欢的页面。例如:当用户想要将书籍与另一个用户进行比较时,用户可以获得相互喜欢的书籍。
我应该如何将数组中的数据存储到表中,以便以后可以使用它进行比较。
答案 0 :(得分:2)
创建一个表(liked_pages
),其中包含您要存储的所有数据的列:
将数组中的数据存储在此表中。
然后给出两个user_id(对于此示例,假设为1
和2
),要查找相互喜欢的页面,您可以执行以下操作:
SELECT id FROM liked_pages
WHERE user_id IN (1,2)
GROUP BY id
HAVING COUNT(id) = 2
如果您想将其扩展为仅查找某个类别中相互喜欢的页面(例如“书籍”),您可以添加其他where子句category = 'books'
。
修改强>
要扩展您在评论中提出的问题,最佳做法是在数据库表中每行只存储一条记录,因为这允许您在检索数据时搜索和排序相关记录,这些数据库引擎是优化的。
替代方案是serialize数组并且每个只存储一个条目 用户然后从数据库unserialize检索数组,然后在PHP中进行所有搜索/排序,但这样效率会降低。