【发布时间】:2014-05-05 20:18:11
【问题描述】:
这是一个我认为实施起来不切实际的问题,但我希望得到一些反馈来确认。
我有一个产品和用户数据库,用户可以在其中喜欢产品,喜欢的数据存储在只有 pid 和 uid 的引用表中。
客户的要求是显示 3 位喜欢产品列表中每个产品的用户。
问题是,不可能在一次查询产品列表中获取此数据,
我曾经实施和随后取消实施的方式是在产品列表循环期间为喜欢产品的用户执行请求。
即。
foreach($prods as $row):
$likers = $this->model->get_likers($row->id);
endforeach;
这行得通,但显然不仅会导致产品列表超级慢,而且还会对数据库/cpu 造成很大压力。
最终实现的解决方案是只显示喜欢它的最新用户(这可以通过加入产品列表查询获得),并有一个链接显示有多少人喜欢,然后点击它, 打开喜欢的 ajax 列表。
所以我的问题是,真的有一种技术可以在产品列表上显示喜欢的人,还是根本无法实际执行?我注意到实际上对于大多数社交媒体网站,它们并没有在列表中显示所有喜欢的人,并且确实采用了“点击查看喜欢”的方法。但是,它们确实会在列表中显示每个项目的 cmets,这实际上涉及到相同的问题不是吗?
任何帮助/指导将不胜感激!
谢谢
编辑:附加在期望结果上的模型。每页将有 30 个产品。
【问题讨论】:
-
您能否详细说明您想要获得的结果(包括样本数据/预期结果通常会有所帮助)?据我了解,您想要一个产品列表,并且对于每个产品,您想要 3 个人喜欢它?
-
嗨,Alex,是的,您所理解的正是我的意思。这更多是一个概念/技术问题,所以实际的具体数据并不重要,除了我们有一个产品列表和一个用户列表,用户可以喜欢产品,这个用户产品关系是存储在交集表中。那么是否可以列出每页 50 个产品,并显示 X 数量的用户喜欢加载时间快且资源容易使用的产品?
-
您是否正在寻找与 SQL 相关的解决方案,因为我认为 Pinterest 使用 Redis 来处理这些关系。
标签: php mysql database performance social