用户如何拥有多个喜欢?

时间:2011-10-02 22:44:35

标签: php mysql

最近我正在制作一个脚本应用程序。人们可以发布和分享内容(为了问题,我们称之为对象)。事实是,用户可以在他的个人资料中“标记对象”。

我有一个用于具有唯一uid(主键)的用户的表和一个用于具有唯一oid(主键)的对象的表。我正在考虑在MySQL中创建一个新表,将其称为likes_objects,其中包含以下内容:

id - oid - uid

每次我需要找到用户X喜欢的所有对象时,我都可以运行查询

SELECT * FROM liked_objects WHERE uid = userXid

我的问题是:有最有效的方法吗?

我正在使用PHP 5和MySQL数据库。 最好的问候

6 个答案:

答案 0 :(得分:0)

我认为这样做会有效,只需确保uid中的liked_objects列被编入索引,以帮助加快查询速度。

答案 1 :(得分:0)

这取决于您运行该查询的次数。它没有那么简单,但是如果你需要优化的话,你可以随时缓存喜欢的对象,甚至在你选择剩下的用户信息时在连接中抓取它们。

答案 2 :(得分:0)

据我所知,您提出的解决方案正是您想要的方式。只需确保在新表上添加索引即可显着加快查询速度。

答案 3 :(得分:0)

您可以删除字段“id”并将“oid”和“uid”作为复合主键。

答案 4 :(得分:0)

您的liked_objects表格不需要id列。假设用户只能对每个对象进行一次,则可以使用两列:

uid | oid

将主键设为两列。然后不同于你的对象:

DELETE FROM `liked_objects` WHERE uid = 'user_id' AND oid = 'object_id'

喜欢你的对象:

INSERT INTO `liked_objects` (`uid`, `oid`) VALUES('user_id', 'object_id')

你可以按照你说的方式选择喜欢的对象。

答案 5 :(得分:0)

我个人建议您使用当前的想法。其他

另一种方法:

<强>序列化

Serialize函数可帮助您将数组存储到mysql字段

使用序列化函数的帮助将故障数组的用户转换为对象表中的字段( users_liked.objects )。

和另一个数组存储到用户字段,其中包含他喜欢的对象。 (的 likes.users

优点:

显示对象时。只需获取users_liked.obj

向用户显示likes.get likes.user

缺点:当用户喜欢时,你必须将他的id添加到users_liked.objects并将对象ID添加到likes.users