在 HTML table 中显示 SQL 查询 (php)
Displaying SQL Query in HTML table (php)
尝试将 2 个不同 table 的计数转换为简单的 HTML table。
这是我的代码:
$sql = "SELECT COUNT(*) FROM tasks";
$result = $conn->query($sql);
$rowcount=mysqli_num_rows($result);
if ($result->num_rows > 0) { ?>
<table style="width:100%">
<tr>
<th>Total</th>
</tr>
<?php while($row = $result->fetch_assoc()) { ?>
<tr>
<td><?=$rowcount;?></td>
</tr>
<?php } ?>
</table>
<?php } else { echo "0 results"; } ?>
当我 运行 代码时,它显示 table 中的行数,但它也会创建其中包含数字的行数(即 281 行)。
Table
281
281
281
281 etc.
我的想法是复制并粘贴上面的内容以显示第二组 table 结果(如果正确的话),但是有更好的方法吗?我一直在研究如何将 SELECT (select COUNT(*) from tasks) , (select count(*) from quotes)
显示为以下格式 (HTML):
Table
Count
Tasks
281
Quotes
42000
I've been looking at how I would display SELECT (select COUNT() from
tasks) , (select count() from quotes) into the following format
(HTML)
您可以只运行查询查询,并使用第一个的结果创建table的第一行,然后使用第二个的结果创建第二行。由于在没有 GROUP BY 的情况下 COUNT 查询总是 return 恰好 1 行,所以做起来非常简单:
$sql1 = "SELECT COUNT(*) FROM tasks";
$result1 = $conn->query($sql1);
if ($row = $result1->fetch_array()) $taskCount = $row[0];
else $taskCount = "error";
$sql2 = "SELECT COUNT(*) FROM quotes";
$result2 = $conn->query($sql2);
if ($row = $result2->fetch_array()) $quoteCount = $row[0];
else $quoteCount = "error";
?>
<table style="width:100%">
<tr>
<th>Table</th>
<th>Count</th>
</tr>
<tr>
<td>Tasks</td>
<td><?php echo $taskCount; ?></td>
</tr>
<tr>
<td>Quotes</td>
<td><?php echo $quoteCount; ?></td>
</tr>
</table>
另一种方法,如果您希望 HTML 结构不那么重复/依赖于 tables 查询,则将 UNION
和 SELECT
s 转换为单个查询:
$sql = "SELECT 'Tasks' AS 'table', COUNT(*) as 'count' FROM tasks";
$sql .= " UNION ";
$sql .= "SELECT 'Quotes' AS 'table', COUNT(*) as 'count' FROM quotes";
$result = $conn->query($sql);
?>
<table style="width:100%">
<tr>
<th>Table</th>
<th>Count</th>
</tr>
<?php
while ($row = $result->fetch_assoc()) { ?>
<tr>
<td><?php echo $row["table"]; ?></td>
<td><?php echo $row["count"]; ?></td>
</tr>
<?php
}
?>
</table>
首先,您的查询确实只为 table 生成一行,而不是 281。
第二个 - 我省略了带有占位符的准备好的 SQL 语句的使用,只要适用,就应该始终在实际项目中使用。
$rows = [];
foreach(['Tasks', 'Quotes'] as $table ){
$result = $conn->query("SELECT '$table' as 'table', count(*) as 'count' FROM $table");
if( $result )
$rows[] = $result->fetch_assoc();
}
if( empty( $rows ) )
print "0 results";
else {?>
<table style="width:100%">
<tr><th>Table</th><th>Count</th></tr>
<?=implode(
"\n",
array_map(function($row){
return "<tr><td>${row['table']}</td><td>${row['count']}</td></tr>";
}, $rows)
)?>
</table>
<?php }
尝试将 2 个不同 table 的计数转换为简单的 HTML table。
这是我的代码:
$sql = "SELECT COUNT(*) FROM tasks";
$result = $conn->query($sql);
$rowcount=mysqli_num_rows($result);
if ($result->num_rows > 0) { ?>
<table style="width:100%">
<tr>
<th>Total</th>
</tr>
<?php while($row = $result->fetch_assoc()) { ?>
<tr>
<td><?=$rowcount;?></td>
</tr>
<?php } ?>
</table>
<?php } else { echo "0 results"; } ?>
当我 运行 代码时,它显示 table 中的行数,但它也会创建其中包含数字的行数(即 281 行)。
Table |
---|
281 |
281 |
281 |
281 etc. |
我的想法是复制并粘贴上面的内容以显示第二组 table 结果(如果正确的话),但是有更好的方法吗?我一直在研究如何将 SELECT (select COUNT(*) from tasks) , (select count(*) from quotes)
显示为以下格式 (HTML):
Table | Count |
---|---|
Tasks | 281 |
Quotes | 42000 |
I've been looking at how I would display SELECT (select COUNT() from tasks) , (select count() from quotes) into the following format (HTML)
您可以只运行查询查询,并使用第一个的结果创建table的第一行,然后使用第二个的结果创建第二行。由于在没有 GROUP BY 的情况下 COUNT 查询总是 return 恰好 1 行,所以做起来非常简单:
$sql1 = "SELECT COUNT(*) FROM tasks";
$result1 = $conn->query($sql1);
if ($row = $result1->fetch_array()) $taskCount = $row[0];
else $taskCount = "error";
$sql2 = "SELECT COUNT(*) FROM quotes";
$result2 = $conn->query($sql2);
if ($row = $result2->fetch_array()) $quoteCount = $row[0];
else $quoteCount = "error";
?>
<table style="width:100%">
<tr>
<th>Table</th>
<th>Count</th>
</tr>
<tr>
<td>Tasks</td>
<td><?php echo $taskCount; ?></td>
</tr>
<tr>
<td>Quotes</td>
<td><?php echo $quoteCount; ?></td>
</tr>
</table>
另一种方法,如果您希望 HTML 结构不那么重复/依赖于 tables 查询,则将 UNION
和 SELECT
s 转换为单个查询:
$sql = "SELECT 'Tasks' AS 'table', COUNT(*) as 'count' FROM tasks";
$sql .= " UNION ";
$sql .= "SELECT 'Quotes' AS 'table', COUNT(*) as 'count' FROM quotes";
$result = $conn->query($sql);
?>
<table style="width:100%">
<tr>
<th>Table</th>
<th>Count</th>
</tr>
<?php
while ($row = $result->fetch_assoc()) { ?>
<tr>
<td><?php echo $row["table"]; ?></td>
<td><?php echo $row["count"]; ?></td>
</tr>
<?php
}
?>
</table>
首先,您的查询确实只为 table 生成一行,而不是 281。 第二个 - 我省略了带有占位符的准备好的 SQL 语句的使用,只要适用,就应该始终在实际项目中使用。
$rows = [];
foreach(['Tasks', 'Quotes'] as $table ){
$result = $conn->query("SELECT '$table' as 'table', count(*) as 'count' FROM $table");
if( $result )
$rows[] = $result->fetch_assoc();
}
if( empty( $rows ) )
print "0 results";
else {?>
<table style="width:100%">
<tr><th>Table</th><th>Count</th></tr>
<?=implode(
"\n",
array_map(function($row){
return "<tr><td>${row['table']}</td><td>${row['count']}</td></tr>";
}, $rows)
)?>
</table>
<?php }