【发布时间】:2016-12-17 13:55:31
【问题描述】:
我有一个ranking 模块,用户可以在其中搜索其他用户。结果显示在表格中,对于每个结果,我还想显示用户当前的排名位置。所以比如搜索dav,结果可能是:
-- Position -- Points -- Name --
30 2345 Dave
105 1650 Davy
965 895 Superdavy
1949 35 Dave123
我的问题是:计算职位的最佳方法是什么?排名是通过points 订购用户来计算的。我可以让所有用户使用
$results = User::where('name', 'LIKE', "%$query%")->orderBy('points')->paginate(25);
但是我应该遍历结果并为每个用户查询数据库以计算排名位置吗?或者有没有更简单的方法?因为,如果搜索包含 50 个结果并且有人在几秒钟内搜索了多次,则会触发大量数据库查询...
【问题讨论】:
-
请显示排名数字存储在哪里或如何计算。
-
糟糕,抱歉,我更新了答案
-
位置栏不是多余的吗?
-
@BaikHo,是的,该列不是数据库的一部分,但它是在前端显示时计算的。
-
当您有很多要排名的项目时,重新计算排名是一项代价高昂的任务。重新考虑实时进行的必要性。
标签: php mysql performance laravel laravel-5