Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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 按循环变量排序While循环或SQL查询_Php_Sql_Database_Arrays_Loops - Fatal编程技术网

Php 按循环变量排序While循环或SQL查询

Php 按循环变量排序While循环或SQL查询,php,sql,database,arrays,loops,Php,Sql,Database,Arrays,Loops,我真的被卡住了,已经搜索了一段时间,但没有成功 无论如何,我有一个被称为贝叶斯估计的公式:(WR)=(v÷(v+m))×R+(m÷(v+m))×C 我有三个数据库表:人员、评论、评级 persons表非常基本,但是为了解决这个问题,它只有一个字段:ID reviews表具有id、personID和description,其中personID是该人员的id 评级表有id、personID、reviewID、ratingX、ratingY、ratingZ其中person是该人的id,reviewID

我真的被卡住了,已经搜索了一段时间,但没有成功

无论如何,我有一个被称为贝叶斯估计的公式:(WR)=(v÷(v+m))×R+(m÷(v+m))×C

我有三个数据库表:人员、评论、评级

persons表非常基本,但是为了解决这个问题,它只有一个字段:ID

reviews表具有id、personID和description,其中personID是该人员的id

评级表有id、personID、reviewID、ratingX、ratingY、ratingZ其中person是该人的id,reviewID是该评论的id。评级X/Y/Z是个人的三种不同评级,在我的页面中显示了这三个数字的平均值

列出它们的表单,但是,根据贝叶斯估计公式对它们进行排序。我不知道如何做到这一点,这似乎超出了我的理解,因为您不能按$bayesian_公式或类似的方式订购。脚本如下所示:

<?php
$result = $db->query("SELECT * FROM persons");
$m =; //SQL to get average number of reviews of all persons
$c =; //SQL to get average rating of all persons
while( $row = $result->fetch_array() ){

$r =; //SQL to get average ratings of person
$v =; //SQL to get total number of reviews of person

$formula = ($v / ($v+$m)) * $r + ($m / ($v+$m)) * $c;

$result2 = $db->query("SELECT * FROM ratings ORDER BY $formula");
    while( $row2 = $result2->fetch_array() ){

    $result3 = $db->query("SELECT * FROM persons WHERE id='$row2[person]'");
    $row3 = $result3->fetch_array();

    echo $row2['description']."<br> rating: ".round( ($row['ratingX'] + $row['ratingY'] + $row['ratingZ']) / 3 );

    }

}
?>

你可以用

我不懂。。。我读了它,你会如何使用它来排序我的查询?请举个例子好吗?您将所有内容从PHP移动到存储过程,然后只需使用PHP中的
调用您的\u procedure\u name()
,即可对您的计算数据进行排序。请举个例子,说明它至少可以帮助我。它几乎是SQL的一个函数。。。这对我来说是一个全新的话题,这就是定义所说的,所以我看不出它有什么帮助。这是一个临时值吗?如果是这样,我该如何使用它,因为我尝试了$db->query(“CREATE…”);然后$db->query(“CALL…”);但这没有任何作用,如果我使用PHPMYADMIN的sql启动器,它也会返回一个错误。是的,我有mysqli支持。你存储这个过程一次,然后调用它。搜索教程和好处。你根本没有帮助我,也没有给我任何指导。在过去的8个小时里,我一直在搜索它们是什么,它告诉我的是,它的工作原理与函数完全一样。唯一的好处是它执行查询的速度更快。这对我有什么帮助?我不知道你是否知道我想做什么,但我怎么能调用一个过程,然后突然用一个变量对数据库查询的WHILE循环排序?我不想实际创建一个新的字段、表或任何东西,如果所有调用都是给我评级,那么这是没有用的。您使用的是哪种RDBMS(Oracle、SQLServer等)?您可以包括用于派生m、c、r和v的SQL吗?在SQL中派生和排序结果可能比在php中循环遍历数据集更简单、更高效。
$c_query=$db->query("SELECT ((ratingX + ratingY + ratingZ) / 3) as avg_rate FROM ratings");
$c_ = $c_query->fetch_array();
$c = $c_['avg_rate'];

$m_query=$db->query("SELECT COUNT(id) AS count FROM ratings");
$m_ = $m_query->fetch_array();
$m = $m_['count'];

$v_query=$db->query("SELECT COUNT(id) AS count FROM ratings WHERE person='$row[id]'");
$v_ = $v_query->fetch_array();
$v = $v_['count'];

$r_query=$db->query("SELECT ((ratingX + ratingY + ratingZ) / 3) as avg_rate FROM ratings WHERE person='$row[id]'");
$r_ = $r_query->fetch_array();
$r = $r_['avg_rate'];