我正在创建一个网站,用户可以在其中登录并查看Tablet PC 在平板电脑页面上,访问该网站的访问者可以查看其他用户留下的评论。尽管用户可以查看5个平板电脑,但是' ipad'例如,页面只显示' ipad'评论。代码如下所示:
<?php
include('connection.php');
$result = mysql_query("SELECT * FROM tt_review WHERE product = 'Apple iPad'");
echo "<table border='1'>
<tr>
</tr>";
while($row = mysql_fetch_array($result)) //This function is calling the results variable and displaying them within the rows below
{
echo "<tr>"; //this code tells the page to output the table rows that are defined above
echo "<td>" . $row['name'] . "</td>";
echo "<td>" . $row['date'] . "</td>"; //each row is then executed using the table data function
echo "<td>" . $row['product'] . "</td>";
echo "<td>" . $row['star'] . "</td>";
echo "<td>" . $row['comment'] . "</td>";
echo "</tr>";
}
echo "</table>";
?>
我的数据库中有一个名为&#39; star&#39;这是用户给平板电脑的评分。可以选择1,2,3,4或5。我需要的代码可以算出“明星”的平均值。评分来自&#39; ipad&#39;页面,并根据它的数字显示图像。
所有帮助都非常感谢,因为我是新手,似乎无法在线找到答案。 谢谢 乔纳森
答案 0 :(得分:2)
使用 mysqli 连接数据库。然后,您可以使用 AVG 功能计算 星 列的平均值。执行查询并获取数组,然后打印平均值。然后您可以使用简单的切换案例或 if else 根据获得的平均值显示图片。
<?php
$db = mysqli_connect("host","user","pass","database");
$query = "SELECT AVG(column_name) FROM table_name";
$result = mysqli_query($db, $query);
$array = mysqli_fetch_row($result);
$average = $array[0];
echo $average;
?>
答案 1 :(得分:0)
根据我的理解,您想要计算每个平板电脑的平均评分。如果是,您只需从数据库中获取特定平板电脑的 星级 列,然后将其解压缩为数组并运行一个简单的 for-each循环 计算该平板电脑评级的总和和平均值,根据计算的平均值计算,指示可以以图像的形式放在屏幕上或别的。
答案 2 :(得分:0)
我和其他人一起使用&#39; mysql _ *&#39;功能,但我不会进入这里,因为这与你的问题无关。
要查找平均值,请将所有总星数加在一起并除以数量。我的建议是首先找出返回的行数。
$totalStars = count($result);
您还需要知道列的总和。这是使用SUM(列)完成的。像这样:
$result = mysql_query("SELECT SUM(star) as TotalStars, name, date, product, star, comment FROM tt_review WHERE product = 'Apple iPad'");
但是,您也可以在代码中添加一个计数器,如下所示:
$x = 0;
while($row = mysql_fetch_array($result)) {
$x += $row['star'];
// your other code
$x++;
}
最后,最后,您可以通过执行以下操作来显示平均值:
if ($totalStars != 0 ) {
$average = $x / $totalStars;
echo "This product's average stars is " . $average . PHP_EOL;
} else {
// handle the divide by zero issue
}
当谈到显示特定图像时,您可以使用条件语句或类似:
if ($average > 0 && $average <= 1) {
echo "<img src='images/star1.jpg' alt='star1' />";
} else if ($average > 1 && $average <= 1.5) {
// etc etc etc
}
希望有所帮助。
答案 3 :(得分:0)
如上所述,使用PDO连接数据库。以下是你获得普通明星的方法:
$i = 0;
$totalStars = 0;
while($row = mysql_fetch_array($result))
{
$totalStars += $row['star'];
// rest of your code
$i++;
}
echo 'Average stars = '.($totalStars/$i);
答案 4 :(得分:0)
正如其他人所指出的,Mysql具有AVG()功能,您可以将其用于此目的。
SELECT AVG(star) AS rating FROM tt_review WHERE product = 'Apple iPad' GROUP BY product;
或者,要获得所有产品的星级评分,请不要使用WHERE
SELECT AVG(star) AS rating FROM tt_review GROUP BY product;
如果您只想让您的评分为1,2,3,4或5
SELECT ROUND(AVG(star), 0) AS rating FROM tt_review WHERE product = 'Apple iPad' GROUP BY product;
如果你想要舍入的数字(一个共同的愿望)
SELECT CEILING(AVG(star)) AS rating FROM tt_review WHERE product = 'Apple iPad' GROUP BY product;