Выберите количество различных значений в столбце и отобразите их

У меня есть таблица в моей базе данных с именами, и каждая строка внутри этой таблицы имеет класс следующим образом:

ИмяКласс
ДжонКласс-1
ИзабельКласс-2
ОтметкаКласс-1
ГабриэльКласс-2
МайкКласс-2

Как видите, у меня есть повторы класс-1 и класс-2. Что я хочу сделать, так это узнать, сколько существует классов отчетливый (то есть в примере класс-1 и класс-2), и для каждого класса я хочу отображать имена, соответствующие этому классу, отдельно в разных div. . Итак, результат, который я хочу:

<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;
}

приведенный выше код - это просто тест, чтобы увидеть, правильно ли я получаю «классы» в «классе», но, по-видимому, это не так.

Ну, если вы выберете DISTINCT, вы не получите все строки и, следовательно, не получите все имена людей.

RiggsFolly 05.05.2022 17:46

Итак, ваш текущий код вообще не возвращает никаких строк с Class-2??

RiggsFolly 05.05.2022 17:48

@RiggsFolly (я не знаю, как ответить напрямую, поэтому просто отмечу вас), да, это не так. Я пробовал несколько запросов, и все, что он возвращает, - это первая строка дважды.

MasterMind 05.05.2022 17:55

Просто добавьте комментарий под ответом, я автоматически получу сообщение в свой почтовый ящик

RiggsFolly 05.05.2022 18:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
28
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы хотите иметь "выберите класс, подсчитайте() как classCount из группы имен по классу, упорядоченному по классу "*, затем присоедините его к своему списку людей в классе.

ИмяКлассклассCount
ДжонКласс-12
ИзабельКласс-23
ИзабельКласс-12
ОтметкаКласс-23
ГабриэльКласс-23

Имя Класс Джон Класс-1 Изабель Класс-2 Марк Класс-1 Габриэль Класс-2 Майк Класс-2

Почему, ОП сказал, что им нужен счет?

RiggsFolly 05.05.2022 18:04

Я новичок в mysql, так что не могли бы вы показать мне, что вы имеете в виду под «присоединяйтесь к нему»? Я помню, что видел что-то подобное, но я точно не знаю, что он делает и как его использовать.

MasterMind 05.05.2022 18:05

@RiggsFolly Я думаю, что на самом деле foreach решил бы это лучше.

kipras 05.05.2022 18:10
Ответ принят как подходящий

В вашем коде вы обрабатываете только ОДНУ строку результата из вашего набора результатов.

Но поскольку вы используете mysqli_fetch_array без каких-либо параметров, вы получаете массив assoc и числовой массив, поэтому эта одна строка в виде массива выглядит так:

$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>';
}
?>

Я новичок в mysql, поэтому я мало что знаю... Как именно я могу получить все строки из набора результатов и поместить их в массив, чтобы я мог перебирать их?

MasterMind 05.05.2022 18:02

код работал до foreach, затем он выдает предупреждение о том, что «Преобразование массива в строку». Что я должен делать?

MasterMind 05.05.2022 18:14

Хм, что я сделал не так... смотрю

RiggsFolly 05.05.2022 18:17

Массив ( [класс-1] => Массив ( [0] => Джон [1] => Марк ) [класс-2] => Массив ( [0] => Изабель [1] => Габриэль [2] => Майк))

MasterMind 05.05.2022 18:20

Хорошо, это исправлено

RiggsFolly 05.05.2022 18:28

Другие вопросы по теме