[英]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中,您只能使用IS
或IS NOT
运算符与布尔值(即TRUE
, FALSE
或UNKNOWN
。 -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'
。 rows
现在是保留关键字,因此您必须将其与诸如`rows`
反引号括起来。 $row["SUM(`rows`)"]
,但是如果使用别名,它将使您的代码更简单。 将别名添加到像SUM(`rows`) AS sumOfRows
这样的总和中,然后可以像$row["sumOfRows"]
一样访问它 isset($row["sumOfRows"])
。 这将总和为0且没有匹配的记录区分开来。 如果要在状态不是klar的地方使用。 将您的代码更改为此...
$sql = "SELECT SUM(rows) FROM registervard WHERE status != 'Klar'";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.