Php 如何计算不同时间段内点数总数的百分位排名?
在基于PHP&CodeIgniter的网站上,用户可以通过各种操作赢得声誉,这与堆栈溢出没有什么不同。每次授予声誉时,都会在MySQL表中创建一个新条目,其中包含Php 如何计算不同时间段内点数总数的百分位排名?,php,mysql,math,codeigniter,Php,Mysql,Math,Codeigniter,在基于PHP&CodeIgniter的网站上,用户可以通过各种操作赢得声誉,这与堆栈溢出没有什么不同。每次授予声誉时,都会在MySQL表中创建一个新条目,其中包含用户id、奖励的行为以及该系列积分的值(例如10个声誉)。同时,更新用户表中的一个字段声誉(总计) 由于没有参考框架,所有这些都是毫无意义的,所以我想向用户展示他们在所有用户中的百分比排名。对于整体声誉来说,这似乎很容易。假设我的用户id是1138。只需计算users表中信誉度小于我的用户数,计算用户总数,然后除以信誉度低于我的用户百分
用户id
、奖励的行为以及该系列积分的值(例如10个声誉)。同时,更新用户
表中的一个字段声誉(总计
)
由于没有参考框架,所有这些都是毫无意义的,所以我想向用户展示他们在所有用户中的百分比排名。对于整体声誉来说,这似乎很容易。假设我的用户id
是1138
。只需计算users
表中信誉度小于我的用户数,计算用户总数,然后除以信誉度低于我的用户百分比。这就是用户1138的百分位数,对吗?轻松点
但我也会显示不同时间段内的声誉总数——例如,过去七天的收入,这涉及到查询声誉表,并将我自给定日期以来获得的所有积分相加。我还想展示不同时间跨度的百分位排名——例如,我可能总体上是第11个百分位,但本月是第50个百分位,今天是第97个百分位
似乎我必须仔细检查并找到给定时间跨度内所有用户的声誉总数,然后看看我属于那个组,不是吗?这不是很麻烦吗?最好的方法是什么
非常感谢。我不明白为什么这会太复杂。通常,您只需在WHERE子句中添加一个限制结果的查询,如:
WHERE DatePosted between @StartOfRange and @EndOfRange
在这里,我可以想到几个选项:
两个选项2和3可能需要一个批处理来计算每天的总数,所以这也是一个要考虑的事情。< /P>
我不认为任何选择都是最好的——它们都涉及速度/存储空间/复杂性/灵活性的不同权衡。当然,您所做的最终取决于应用程序的要求。不复杂,不复杂——但我必须为每个用户都这样做,不是吗?虽然这并不复杂,但那不是。。。好。。。慢?你对每个用户都意味着什么?我真的不能说太多,因为我们不知道你的实际查询是什么样子。