我需要为我的应用程序设置评级系统,会发生的情况是用户可以对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语句中计算这个,但是当这个问题解决后,我会问另一个问题。感谢。
答案 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