У меня есть таблица в моей базе данных с именами, и каждая строка внутри этой таблицы имеет класс следующим образом:
Имя | Класс |
---|---|
Джон | Класс-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;
}
приведенный выше код - это просто тест, чтобы увидеть, правильно ли я получаю «классы» в «классе», но, по-видимому, это не так.
Итак, ваш текущий код вообще не возвращает никаких строк с Class-2
??
@RiggsFolly (я не знаю, как ответить напрямую, поэтому просто отмечу вас), да, это не так. Я пробовал несколько запросов, и все, что он возвращает, - это первая строка дважды.
Просто добавьте комментарий под ответом, я автоматически получу сообщение в свой почтовый ящик
Вы хотите иметь "выберите класс, подсчитайте() как classCount из группы имен по классу, упорядоченному по классу "*, затем присоедините его к своему списку людей в классе.
Имя | Класс | классCount |
---|---|---|
Джон | Класс-1 | 2 |
Изабель | Класс-2 | 3 |
Изабель | Класс-1 | 2 |
Отметка | Класс-2 | 3 |
Габриэль | Класс-2 | 3 |
Имя Класс Джон Класс-1 Изабель Класс-2 Марк Класс-1 Габриэль Класс-2 Майк Класс-2
Почему, ОП сказал, что им нужен счет?
Я новичок в mysql, так что не могли бы вы показать мне, что вы имеете в виду под «присоединяйтесь к нему»? Я помню, что видел что-то подобное, но я точно не знаю, что он делает и как его использовать.
@RiggsFolly Я думаю, что на самом деле foreach решил бы это лучше.
В вашем коде вы обрабатываете только ОДНУ строку результата из вашего набора результатов.
Но поскольку вы используете 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, поэтому я мало что знаю... Как именно я могу получить все строки из набора результатов и поместить их в массив, чтобы я мог перебирать их?
код работал до foreach, затем он выдает предупреждение о том, что «Преобразование массива в строку». Что я должен делать?
Хм, что я сделал не так... смотрю
Массив ( [класс-1] => Массив ( [0] => Джон [1] => Марк ) [класс-2] => Массив ( [0] => Изабель [1] => Габриэль [2] => Майк))
Хорошо, это исправлено
Ну, если вы выберете DISTINCT, вы не получите все строки и, следовательно, не получите все имена людей.