PHP初学者与MySQL的麻烦

时间:2014-08-05 18:55:40

标签: php mysql

我正在创建一个网站,用户可以在其中登录并查看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;页面,并根据它的数字显示图像。

所有帮助都非常感谢,因为我是新手,似乎无法在线找到答案。 谢谢 乔纳森

5 个答案:

答案 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;