我有一个相册。我想添加“添加到收藏夹”按钮 - 这样用户就可以将其他用户添加到他/她的收藏夹中。然后我希望每个用户都能够看到他最喜欢的用户列表,以及能够看到谁(用户列表)将该用户添加到收藏夹。
我找到了两种方法,第一种是:
faver_id faved_id
1 10
1 31
1 24
10 1
10 24
我不喜欢这种方法因为 1) 大量重复 2) future 非常大的表(如果一个至少有 1001 个用户,并且每个用户都喜欢其他 1000 个用户 = 1 001 000 条记录)我想这会减慢我的基础。
第二种方式是:
user_id favs
1 1 23 34 56 87 23
10 45 32 67 54 34 88 101
如果用户喜欢其他用户,我可以在 php 中获取这些收藏夹和 explode() select count(user_id) from users where favs LIKE '% 23 %' and user_id=10;
但我觉得第二种方式在 MySQL 术语中不是很“正确”。
你能给我一些建议吗?
最佳答案
想想这个。您反对使用第一种方法的论点是您的表可能会变得太大,但是您接着说如果您使用第二种方法,您可以运行通配符查询来查找包含 某些内容的字段。
第二种方法强制进行全表搜索,并且不可索引。使用第一种方法,您只需在每个列上添加索引就可以了。第一种方法比第二种方法好很多、很多、很多。由于扩展似乎是您唯一关心的第一个问题,我认为答案是显而易见的。
采用第一种方法。多对多表无处不在,这是有充分理由的。
编辑:
另一个问题是,第二种方法将维护数据库的大量工作移交给了应用程序。这在某些情况下很好,但您所谈论的情况是数据库擅长的事情。你只会重新发明轮子,而且很糟糕。
关于mysql - 在 MySQL 中存储用户的 "favorites"的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415518/