我真的被卡住了,並且一直在尋找一段時間,但沒有成功。通過循環變量對循環或SQL查詢進行排序變量
無論如何,我有這個公式稱爲貝葉斯估計:(WR)=(V÷(V + M))×R +(M÷(V + M))×C
我有三個數據庫表:人員,評論,評級。
個人表是很基本的,但對這個問題的緣故,它只有一個字段:ID
reviews表已經ID,PERSONID,說明其中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);
}
}
?>
$公式循環到數據庫結果的加權評分的每個迭代。
顯然這是不正確的。我將如何完成這項工作?我需要修改我的整個腳本嗎?實際的一個更長,更詳細。
編輯:
sql語句是:
$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'];
您正在使用哪種RDBMS(Oracle,SQLServer等)? – 2012-02-15 10:44:33
您能否包含用於派生m,c,r和v的SQL?在SQL中導出和排序結果可能會更簡單,更高效,而不是循環遍歷php中的數據集。 – 2012-02-15 10:48:07
將sqls添加到主帖 – user1210725 2012-02-16 01:33:28