gpt4 book ai didi

php - 用户评分更新、重新计算

转载 作者:行者123 更新时间:2023-11-29 08:45:55 24 4
gpt4 key购买 nike

我有一个表,其中包含字段 id、投票(针对每个用户)、评级。

任务:根据自己和其他人的投票来计算用户评分。也就是说,每次更新字段投票时都需要重新计算字段评分。

这意味着有些人可能会排在第三位。投票给他,他将排名第二,反之亦然 - 从 2 到 3。(在评级领域)

如何解决这个问题?每次在php上更新字段来统计用户评分并在mysql中进行大量更新查询是非常昂贵的。

最佳答案

如果您想在没有评级列的情况下通过选择来获取评级,那么这就是方法。然而,从性能的角度来看,我不能保证这将是您的最佳选择。它的工作原理是,如果两个用户拥有相同数量的选票,他们将具有相同的评级,然后它将跳过下一个不同评级所需的数量:

set @rating:=0;
set @count:=1;

select id,
case when @votes<>votes then @rating:=@rating+@count
else @rating end as rating,
case when @votes=votes then @count:=@count+1
else @count:=1 end as count,
@votes:=votes as votes
from t1
order by votes desc

sqlfiddle

这为您提供了一个可以忽略的额外列,或者您可以将此选择包装到子查询中并具有:

select t2.id,t2.votes,t2.rating from (
select id,
case when @votes<>votes then @rating:=@rating+@count
else @rating end as rating,
case when @votes=votes then @count:=@count+1
else @count:=1 end as count,
@votes:=votes as votes
from t1
order by votes desc) as t2

但是sqlfiddle奇怪的是给出不一致的结果,所以你必须做一些测试。如果有人知道这是为什么,我很想知道原因。

如果您只想获取一个用户的评分,那么执行子查询选项并在 from 之后使用 where 应该会得到所需的结果。 sqlfiddle - 但同样,结果不一致,运行几次,有时它给出的评级为 10,其他时候为 30。我认为在您的数据库中进行测试,看看会发生什么是最好的。

关于php - 用户评分更新、重新计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12534369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com