SZ | name | Date | back_number
1234 | John | 18.8.2018 | 5512345
2391 | Bels | 18.8.2018 | 6685800
3498 | ESON | 18.8.2018 | 6685800
4531 | me | 18.8.2018 | 5512345
4531 | me | 18.8.2018 | 8812345
4531 | me | 18.8.2018 | 8812345
这是我数据库中的数据。
我需要在SQL和PHP处理之后获取输出。
我需要按back_number进行过滤。我需要通过back_number列在表中显示记录。而且每个桌子都必须是新的。在每个表中,我需要分配与back_number的记录一样多的记录。
table:
back_number - 5512345
-
SZ - 1234 | name - John | Date 18.8.2018
SZ - 4531 | name - me | Date 18.8.2018
next table
back_number - 6685800
-
SZ - 2391 | name - Bels | Date 18.8.2018
SZ - 3498 | name - ESON | Date 18.8.2018
and next table
back_number - 8812345
-
SZ - 4531 | name - me | Date 18.8.2018
SZ - 4531 | name - me | Date 18.8.2018
实际代码:
$sql = "SELECT * FROM my_DB GROUP BY back_number ";
<?php
foreach ($back_number as $row) {
if( $row['back_number '] != null ){
?>
<article>
<div class="header header_green_grad">
<?php
echo "back_number - " . $row['back_number '];
?>
</div>
<table>
<tr>
<?php
echo "<td>" . $row['SZ'] . "</td>";
echo "<td>" . $row['back_number '] . "</td>";
echo "<td>" . date('d.m.Y', strtotime($row['date'])) . "</td>";
echo "<td>" . $row['name'] . "</td>";
?>
</tr>
</table>
</article>
我在某处可以添加更多的foreach或做什么。我不知道这个建议。
答案 0 :(得分:0)
首先,不要GROUP BY
,ORDER BY
。
SELECT *
FROM my_db
ORDER BY back_number;
然后您可以遍历结果。无论何时back_number
更改都会打印您的标题。然后,否则打印一行。
一些草图:
$current_back_number = "";
foreach ($rows as $row) {
if ($row["back_number"] != $current_back_number) {
// print header
$current_back_number = $row["back_number"];
}
// print row
}
(假设back_number
不能为null或为空。这种假设可能是错误的,您需要相应地完善逻辑。)
答案 1 :(得分:0)
就像@sticky位表示您不能使用group by,它不会单独返回行组。每个组只返回一个...
您可以通过的另一种方法是
$sql = "select distinct(back_number) from FROM my_db";
$back_numbers = mysqli_query($Conn, $sql);
现在
foreach ($back_numbers as $back_number){
$mysql = "select * from FROM my_db where back_number =".$back_number;
$rows = mysqli_query($Conn, $mysql);
foreach($rows as $row){
echo $row;
}
}
这里的一个优点是,您可以在第一个循环中为每个back_number创建一个新表,并将$ row存储在其中。