繁体   English   中英

如何使用PHP显示SUM(行)的值?

[英]How can I display value of SUM(rows) using PHP?

我正在使用PHP从MySQL数据库中的列中获取所有值,并使用WHERE子句将所有这些值组合起来回显总数。 但是我没有显示任何价值。

我的数据库如下所示:

name|status|rows|
Mike|Klar|100|
Pete|Oklar|50|
Anna|OKlar|50|
Kirk|Klar|30|

我的目标是打印“ 100”。 (50 + 50)

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT SUM(rows) FROM registervard WHERE NOT status IS 'Klar'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "Rows: " . $row["rows"]. " <br>";
    }
} else {
    echo "0 results";
}
$conn->close();

我期望为“ 100”,但是页面为空白。 如果删除WHERE子句,则会得到“ 0个结果”

有两个问题:您的位置很笨拙,并且在获取数组时没有获得正确的列名。 如果将查询更改为此以修复WHERE并为SUM使用别名

SELECT SUM(`rows`) as 'rows' FROM registervard WHERE `status` != 'Klar'

您将能够得到结果

让我来帮助您修复代码,并希望教给您一些技巧。

  • 在MySQL中,您只能使用ISIS NOT运算符与布尔值(即TRUEFALSEUNKNOWN -MySQL文档

  • 要与字符串值或任何其他值进行比较,可以使用非等于运算符!=

  • 您还应该启用MySQLi异常以查看错误消息(如果有)。 使用mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 在打开连接之前。

  • 在代码中检查num_rows也是错误的,因为即使没有匹配的记录, SELECT SUM(...) ...也会始终为您提供1行。

考虑一下此代码的固定版本:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli($servername, $username, $password, $dbname);

$sql = "SELECT SUM(`rows`) AS sumOfRows FROM registervard WHERE status != 'Klar'";
$result = $conn->query($sql);

$row = $result->fetch_assoc();
if (isset($row["sumOfRows"])) {
    echo "Rows: " . $row["sumOfRows"]. " <br>";
} else {
    echo "0 results";
}
  • 第一行启用例外模式。 您不再需要手动检查连接错误。
  • 在您的查询中,我将WHERE NOT status IS 'Klar'更改为WHERE status != 'Klar'
  • 如果您决定使用MariaDB,请记住, rows现在是保留关键字,因此您必须将其与诸如`rows`反引号括起来。
  • 您可以使用$row["SUM(`rows`)"] ,但是如果使用别名,它将使您的代码更简单。 将别名添加到像SUM(`rows`) AS sumOfRows这样的总和中,然后可以像$row["sumOfRows"]一样访问它
  • 无需循环处理结果,因为除非您使用聚合,否则sum总是作为一行返回。
  • 要检查是否完全匹配任何行,请使用isset($row["sumOfRows"]) 这将总和为0且没有匹配的记录区分开来。

如果要在状态不是klar的地方使用。 将您的代码更改为此...

$sql = "SELECT SUM(rows) FROM registervard WHERE  status != 'Klar'"; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM