数据库按列分组

时间:2018-08-24 19:22:46

标签: php sql arrays foreach

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或做什么。我不知道这个建议。

2 个答案:

答案 0 :(得分:0)

首先,不要GROUP BYORDER 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存储在其中。