通过循环变量对循环或SQL查询进行排序

时间:2012-02-15 08:16:26

标签: php sql database arrays loops

我真的被困住了,并且一直在寻找,但没有成功。

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

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

人员表非常基本,但为了这个问题,它只有一个字段: ID

评论表包含 id,personID,description ,其中personID是此人的ID。

评分表包含 id,personID,reviewID,ratingX,ratingY,ratingZ ,其中person是此人的ID,而reviewID是评论的ID。 ratingX / Y / Z是这个人的三个不同评级,在我的页面中显示了这三个数字的平均值。

然而,

以他们的形式的形式,通过贝叶斯估计公式对它们进行排序。我不知道如何做到这一点似乎超出了我,因为你不能订购$ bayesian_formula或类似的东西。脚本看起来像这样:

<?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 );

    }

}
?>

$ formula循环到每次迭代的数据库结果的加权评级。

显然这是不正确的。我怎么做这个工作?我是否需要修改整个脚本?实际的更长更详细。

编辑:

sqls是:

$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'];

1 个答案:

答案 0 :(得分:0)

您可以使用CREATE PROCEDURE