使用PHP的数学,评分在1到5之间

时间:2015-06-27 12:57:12

标签: php math

我需要为我的应用程序设置评级系统,会发生的情况是用户可以对1到5的线程进行评级。我将使用的计算如下所示:

ID        UID        TID        Rating
--------------------------------------
1         1          37         5
2         4          37         5
3         8          37         5
4         22         37         5
5         2          37         5

这是一个示例表,你可以看到我的方式,

   r1        r2        r3        r4        r5
(0 x 1) + (0 x 2) + (0 x 3) + (0 x 4) + (5 x 5)
----------------------------------------------- = 5
                    5

没有用户(UID)的评级为1(r1)所以你设置r1 =(0 x 1)但有用户(UID)的评级为5(r5)所以你设置r5 =(5 x 5)和其余的r2,r3,r4设置为(0)没有那些评级。希望你得到它,如果不是生病解释更多。

所以我得到5星评级。

但我的问题是,如果100个不同的用户让我们说所有评价线程5你将使用给定的公式获得5的评级,如果5个不同的用户评价另一个线程5你也会得到5的评级。但我不希望这些结果,因为每个线程的评级都会达到顶峰。我知道我可以在sql中选择按线程评级的用户数量来排序线程,这样100个不同的用户就可以进行顶级工作了,但是有5个用户评分为5的线程将是第二个。

还有另一种评估这些线程的方法,考虑到有多少用户对每个线程进行了评分。

我希望你明白这一点,我的问题?如果没有生病编辑。

我还需要生成一个php脚本,当我检索评级时,在我的select语句中计算这个,但是当这个问题解决后,我会问另一个问题。感谢。

1 个答案:

答案 0 :(得分:1)

我看到你提到了SELECT语句,所以我认为你的意思是所需的SQL语句。

您要求的内容可以完全使用SQL本身,使用以下行。

SELECT TID, AVG(RATING)  FROM ratings GROUP BY TID ORDER BY AVG(RATING) DESC, SUM(RATING) DESC;

以下是我用于测试的数据。

CREATE TABLE ratings(ID INT,UID INT,TID INT,RATING INT);

INSERT INTO ratings VALUES (1,1,37,5);
INSERT INTO ratings VALUES (2,4,37,5);
INSERT INTO ratings VALUES (3,8,37,5);
INSERT INTO ratings VALUES (4,22,37,5);
INSERT INTO ratings VALUES (5,2,37,5);
INSERT INTO ratings VALUES ( 6,1,12,5);
INSERT INTO ratings VALUES ( 7,4,12,5);

SELECT TID, AVG(RATING)  FROM ratings GROUP BY TID ORDER BY AVG(RATING) DESC, SUM(RATING) DESC;

我得到的输出

TID AVG(RATING)
------------------
37  5
12  5