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-1 和 class-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>';
}
?>
我的数据库中有一个名为 names 的 table,这个 table 中的每一行都有一个 class,如下所示:
Name | Class |
---|---|
John | Class-1 |
Isabel | Class-2 |
Mark | Class-1 |
Gabriel | Class-2 |
Mike | Class-2 |
如您所见,我有 class-1 和 class-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>';
}
?>