最近我正在制作一个脚本应用程序。人们可以发布和分享内容(为了问题,我们称之为对象)。事实是,用户可以在他的个人资料中“标记对象”。
我有一个用于具有唯一uid(主键)的用户的表和一个用于具有唯一oid(主键)的对象的表。我正在考虑在MySQL中创建一个新表,将其称为likes_objects,其中包含以下内容:
id - oid - uid
每次我需要找到用户X喜欢的所有对象时,我都可以运行查询
SELECT * FROM liked_objects WHERE uid = userXid
我的问题是:有最有效的方法吗?
我正在使用PHP 5和MySQL数据库。 最好的问候
答案 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