Php Group By将第一列拆分两次

Php Group By将第一列拆分两次,php,mysql,foreach,group-by,Php,Mysql,Foreach,Group By,在这种情况下,我想展示这样的东西 main 1-(3) Sub1-(2) Sub1_6-(1) Sub1_3-(1) Sub2-(1) Sub2_6-(1) main 2-(3) Sub1-(3) Sub1_5-(1) Sub1_3-(1) Sub1_1-(1) main 3-(1) Sub5-(1) Sub5_1-(1) 我尝试了以下代码,但它分裂了一切 +----+---------+---------+---------+ | id | column1 |

在这种情况下,我想展示这样的东西

  • main 1-(3)
    • Sub1-(2)
      • Sub1_6-(1)
      • Sub1_3-(1)
    • Sub2-(1)
      • Sub2_6-(1)
  • main 2-(3)
    • Sub1-(3)
      • Sub1_5-(1)
      • Sub1_3-(1)
      • Sub1_1-(1)
  • main 3-(1)
    • Sub5-(1)
      • Sub5_1-(1)

我尝试了以下代码,但它分裂了一切

+----+---------+---------+---------+
| id | column1 | column2 | column3 |
+----+---------+---------+---------+
|  1 | Main1   | Sub1    | Sub1_6  |
|  2 | Main2   | Sub1    | Sub1_5  |
|  3 | Main3   | Sub5    | Sub5_1  |
|  4 | Main1   | Sub2    | Sub2_6  |
|  5 | Main2   | Sub1    | Sub1_3  |
|  6 | Main2   | Sub1    | Sub1_1  |
|  7 | Main1   | Sub1    | Sub1_3  |
+----+---------+---------+---------+
$servername=“localhost”;
$username=“username”;
$password=“password”;
$dbname=“dbname”;
$con=mysqli_connect($servername、$username、$password、$dbname);
$sql=mysqli_query($con,'selectcolumn1,column2,column3,COUNT(*)从表中按column1,column2,column3'分组;
foreach($sql作为$row){
回声“
    ”; 回显“
  • ”$row['column1']。”-(“$row['COUNT(*)”)”)”
  • ”; 回声“
      ”; 回显“
    • ”$row['column2']。”-(“$row['COUNT(*)”)”)”
    • ”; 回声“
        ”; 回显“
      • ”$row['column3']”-(“$row['COUNT(*)'])””
      • ”; 回声“
      ”; 回声“
    ”; 回声“
”; }
这些代码看起来是这样的,所以问题是;在本例中,它将Main1拆分两次,我希望将它们分组并显示为sub

  • main 1-(2)
    • Sub1-(2)
      • Sub1_6-(1)
      • Sub1_3-(1)
  • main 1-(1)
    • Sub2-(1)
      • Sub2_6-(1)
  • main 2-(3)
    • Sub1-(3)
      • Sub1_5-(1)
      • Sub1_3-(1)
      • Sub1_1-(1)
  • main 3-(1)
    • Sub5-(1)
      • Sub5_1-(1)


它可能有两个以上的sub,所以我需要一些动态的东西。

您必须更改代码,使其不会立即创建输出,而是将从数据库读取的所有条目保存在一个内部临时数组中。这允许对属于一起的条目进行汇总。然后,在第二步中,您可以遍历该数组并创建实际输出。
按列1、列2、列3排序
可能会使生活更轻松
COUNT(*),因为cnt
会将
行['COUNT(*)]
放入
行['cnt']
不需要修改任何东西,但会使事情更容易阅读。您如何获得不同的计数?在所有列分组中,它们应该共享相同的
Count(*)
。您必须更改代码,使其不会立即创建输出,而是将从数据库读取的所有条目保存在内部临时数组中。这允许对属于一起的条目进行汇总。然后,在第二步中,您可以遍历该数组并创建实际输出。
按列1、列2、列3排序
可能会使生活更轻松
COUNT(*),因为cnt
会将
行['COUNT(*)]
放入
行['cnt']
不需要修改任何东西,但会使事情更容易阅读。您如何获得不同的计数?在所有列分组中,它们应该共享相同的
Count(*)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "dbname";

$con = mysqli_connect($servername, $username, $password, $dbname);

$sql = mysqli_query($con, 'SELECT column1,column2,column3,COUNT(*) FROM table GROUP BY column1,column2,column3');
foreach($sql as $row) {
    echo "<ul>";
    echo "<li>" . $row['column1'] . " - (" . $row['COUNT(*)'] . ")</li>";
    echo "<ul>";
    echo "<li>" . $row['column2'] . " - (" . $row['COUNT(*)'] . ")</li>";
    echo "<ul>";
    echo "<li>" . $row['column3'] . " - (" . $row['COUNT(*)'] . ")</li>";
    echo "</ul>";
    echo "</ul>";
    echo "</ul>";
}