Select 一列中有多少个不同的值并显示它们

Select how many distinct values there are in a column and display them

我的数据库中有一个名为 names 的 table,这个 table 中的每一行都有一个 class,如下所示:

Name Class
John Class-1
Isabel Class-2
Mark Class-1
Gabriel Class-2
Mike Class-2

如您所见,我有 class-1class-2 重复。我想做的是得到有多少 distinct classes (即,在示例中, class-1 和 class- 2)对于每个 class ,我想在不同的 div 中分别显示与该 class 对应的名称。所以我想要的输出是:

<div>
 John
 Mark
</div>
<div>
 Isabel
 Gabriel
 Mike
</div>"

我当前的代码返回这个:Class-1Class-1

当第二个 Class-1 应该是 Class-2;

我目前得到的代码:

$query = "select distinct class from names order by class";
$result = mysqli_query($conn, $query);
$array = mysqli_fetch_array($result);
foreach($array as $class) {
  echo $class;
}

上面的代码只是一个测试,看看我是否在“class”中得到了正确的“classes”,但显然我不是。

你想要一个 "select class, count() as classCount from names group by class 按 class"* 订购,然后加入 class

上的人员列表
Name Class classCount
John Class-1 2
Isabel Class-2 3
Isabel Class-1 2
Mark Class-2 3
Gabriel Class-2 3

姓名Class 约翰 Class-1 伊莎贝尔Class-2 马克Class-1 加布里埃尔Class-2 迈克 Class-2

在您的代码中,您只处理结果集中的一个结果行。

但是因为您使用的 mysqli_fetch_array 没有任何参数,您会得到一个关联数组和一个数值数组,所以这一行作为数组看起来像

$array = ['class'=>'Class-1', '0' => 'Class-1'];

因此您得到的输出。

如果你想要我建议的输出

// select all the classes and names
$query = "select class,name from names order by class, name";
$result = mysqli_query($conn, $query);

$classes = [];  // add the names into an array
while ($row = $result->fetch_assoc() ){
    //load the classes names into seperate occurances of the array
    // now if you actually have 100 classes it will still work
    $classes[$row['class']][] = $row['name'] . '<br>';
}

现在在您的HTML中您可以

<?php
foreach ( $classes as $class ) {
    echo implode('<br>', $class) . '<br>';
}
?>