平均PHP的不同和有序结果

时间:2014-08-14 02:33:31

标签: php mysql

我正在尝试从我的表的评级列中获取平均值,然后在HTML表格中为每个不同的div_id及其平均评级显示一行,按降序排列。我知道这应该很容易,但我很难搞清楚。任何帮助将不胜感激。

<?php
mysql_connect($db_server, $db_username, $db_password) or die(mysql_error());
mysql_select_db($db_database) or die(mysql_error());

$result = mysql_query("SELECT * FROM ratings") or die(mysql_error());  
while($row = mysql_fetch_object( $result )){

$ad = $row->div_id;

$result2 = mysql_query("SELECT div_id, avg(rating) AS avg, COUNT(*) FROM ratings WHERE div_id = '" . $ad . "' ORDER BY div_id DESC ") or die(mysql_error());  
while($row2 = mysql_fetch_array( $result2 )){

$adid = $row2[0];
$count = $row2[2];
$avg = round($row2[1],2);



echo "<tr><td>";
echo $adid;
echo "</td><td>";
echo $avg;
echo "</td></tr>";

}
}
?>

2 个答案:

答案 0 :(得分:1)

而是执行两次查询,您只能在一个查询中使用GROUP BY术语。

SELECT div_id, avg(rating) AS avg, COUNT(*) FROM ratings GROUP BY div_id ORDER BY div_id DESC

php code

<?php

mysql_connect($db_server, $db_username, $db_password) or die(mysql_error());
mysql_select_db($db_database) or die(mysql_error());

$result = mysql_query("SELECT div_id, avg(rating) AS avg, COUNT(*) FROM ratings GROUP BY div_id ORDER BY avg DESC") or die(mysql_error());

while($row = mysql_fetch_array( $result )){

    $adid = $row[0];
    $count = $row[2];
    $avg = round($row[1],2);

    echo "<tr><td>" . $adid . "</td><td>" . $avg . "</td></tr>";
}
?>

答案 1 :(得分:0)

也许您应该尝试在一个查询中执行此操作:

SELECT div_id, avg(rating) AS avgrating, COUNT(*) as cnt
FROM ratings 
GROUP BY div_id
ORDER BY avgrating desc;