Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP进行数学运算,评分在1到5之间_Php_Math - Fatal编程技术网

使用PHP进行数学运算,评分在1到5之间

使用PHP进行数学运算,评分在1到5之间,php,math,Php,Math,我需要为我的应用程序建立一个评级系统,用户可以对线程进行1到5的评级。我将要使用的计算如下所示: ID UID TID Rating -------------------------------------- 1 1 37 5 2 4 37 5 3 8 37 5 4 22

我需要为我的应用程序建立一个评级系统,用户可以对线程进行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
没有评级为1(r1)的用户(UID),因此您设置了r1=(0 x 1),但有评级为5(r5)的用户(UID),因此您设置了r5=(5 x 5),其余的r2、r3、r4设置为(0)。这些用户没有评级。希望你能明白,如果不是的话,我会解释得更多

所以我的评级是5星级

但我的问题是,如果100个不同的用户让我们假设所有人都对线程5进行评级,那么使用给定的公式,你将获得5的评级,如果5个不同的用户对另一个线程5进行评级,你也将获得5的评级。但我不想要这些结果,因为每个线程的评分都会达到最高。我知道我可以在sql中选择按对线程进行评级的用户数对线程进行排序,这样100个不同的用户将排在第一位,但有5个用户评级为5的线程将排在第二位

考虑到有多少用户对每个线程进行了评级,是否还有其他方法对这些线程进行评级

我希望你能理解,我的问题?如果没有,我会编辑


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

我看到您提到了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

你说的是平均评分吗?在这种情况下,它的评分总和/评分数。这可能应该在阅读课程后被问到。除了数学,你会得到一个很难翻译成编程上下文的答案。我说这个问题现在还在讨论中。看这篇文章:你可以让你的评级系统基于平均值。评级和用户都算作排名的权重。我在数学堆栈交换中问过这个问题,我应该删除这个问题吗?