php的一个百分比统计问题

我自己做了个项目,考虑到会使用百分比排名功能,并且实现(高于、低于、持平)三个级别做对比。我想问下如果要实现图片中这样的该怎么做呢?注:画红线的地方我都实现出来了,就是这... 我自己做了个项目,考虑到会使用百分比排名功能,并且实现(高于、低于、持平)三个级别做对比。
我想问下如果要实现图片中这样的该怎么做呢?
注:画红线的地方我都实现出来了,就是这个百分比和排名计算问题。
补充一下,每次评分都是有4个选项的:

如图所示这样的,分别插入到4个字段当中(score1,score2,score3,score4)
我一开始能想到的就是这样的实现,但是好像是不正确的;

例如:
得到score1字段中的所有用户记录的总数,赋给变量$num
然后在得到该公司的评价人数,例如是80人,在将这80个score1加起来,赋给变量$usnum

然后在 sprintf('%.2f%%', $usnum / $num * 100); 得到百分比结果,可是实现起来效果还是不正确。另外如何推算排名呢?

望高手解答。
展开
 我来答
epplera
推荐于2016-07-08 · TA获得超过133个赞
知道小有建树答主
回答量:245
采纳率:0%
帮助的人:206万
展开全部
4个字段没错,但要增加一个字段用于排名,这个字段存平均值,即你上面的综合评分。
否则可能导致无法使用索引。
另外这个评分是10分制,而非100分制。
字段存储的值如:8.1,8.2等直接存储10分制数值就行。

score1-4的算法:
方法一:不计效率的话,直接从数据库sum就完了
SQL: SELECT company_id, count(*) as num, sum(score1) as score1,sum(score2) as score2,sum(score3) as score3, sum(score4) as score4 from 评分表 where company_id in(1,2,3) group by company_id ;
最终得到结果,示例算法: score1 = round(score1 / num, 1);
方法二:
如果考虑效率问题,比如评论数可能会草果万,十万,百万。
则建议再增加5个字段分别存储总评分值和总评分人数。
total_score1, total_score2, total_score3, total_score4, score_num,
每次评论时增加这两个值:total_score1 = total_score1+这次评分score1,score_num = score_num + 1
最终score1 = total_score1 / score_num;

综合评分: score5 = round((score1 + score2 + score3 + score4) / 4 ,1);

排名在显示时差数据库,假设当前score5 = $socre5:
select count(*) from company where score5>$score5;
如果company 表很大,建议走计划任务跑数据。
如果表很大但我只要前100名,可以另外建一个表或者缓存,
然后在更新score5 时去判断是否在大于现在100名中的最小一名,如果是就把最小的踢掉,如果不是,就什么也不用做,当然如果这个本身就是这100名中的,那么可能比较麻烦,但是其实你不需要那么老实的存储100名,你可以存储150名,阵中用时就前100名,即便有人从100名中掉队,也可以从后面的50名中取一个上来替代到新的100名中。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式