Я пытаюсь показать общее количество представленных значений переключателя, в моей предыдущей форме есть выбор между "Male", "Female" для пользователя, чтобы выбрать и отправить, и у меня есть база данных для хранения значений (radiob
),
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT radiob FROM playertest";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row["radiob"] . "<br>";
}
} else {
echo "0 results";
}
$conn->close();
У меня есть мой код выше, только отображать все элементы в базе данных под radob,
Male
Male
Female
Есть ли в любом случае, что я могу отобразить его с общим счетом? Хотелось бы, чтобы это выглядело так:
Male: 2
Female: 1
Используйте запрос Aggragage с подсчетом
"SELECT count(id) as total, radiob FROM playertest GROUP BY radiob ";
Я предлагаю добавить в качестве первичного ключа поле Auto Increment ID, если у вас его еще нет.
Это называется суррогатным ключом в мире базы данных, и по мере роста вашей таблицы вы действительно захотите иметь его, чтобы вы могли правильно ссылаться на строку в других запросах.
если вам не нравится, что вы можете сделать
if ($result->num_rows > 0) {
$rows = [];
while($row = $result->fetch_assoc()) {
$rows[] = $row["radiob"];
}
}
$totals = array_count_values($rows);
array_count_values () возвращает массив, используя значения массива как ключи и их частоту в массиве как значения. http://php.net/manual/en/function.array-count-values.php
Строки SO $ должны быть такими
['male','male', 'female']
И array_count_values даст вам это
['male' => 2, 'female' => 1]
Теперь, если вы хотите, чтобы строки содержали больше данных, таких как
while($row = $result->fetch_assoc()) {
$rows[] = $row; //assume row is ['name'=>'foo', 'radiob' => 'male']
}
Вы можете сначала сделать array_column
например (чтобы развернуть его)
$totals = array_count_values(array_column($rows, 'radiob'));
array_column() возвращает значения из одного столбца ввода, идентифицированного с помощью column_key. Необязательно, index_key может быть предоставлен для индексации значений в возвращаемом массиве значениями из столбца index_key входного массива. http://php.net/manual/en/function.array-column.php
В летнее время лучшим способом является объединение его по запросу, но у вас могут быть другие данные, кроме того, что вам нужно (например, имя), в этом случае второй метод.
Ура!
Вот возможное решение. Существуют различные способы сделать это, и я не на 100% уверен, что вы хотите. Но это может заставить вас начать. Я добавил переменные, чтобы удерживать целые значения числа мужчин/женщин. Я помещаю их в массив с ключевым значением, которое соответствует значениям в вашей базе данных. Затем в каждом цикле значение увеличивается в сумме элемента массива, соответствующего значению строки DB. В конце я повторяю два итога.
$sql = "SELECT radiob FROM playertest";
$result = $conn->query($sql);
$array[ 'Male' => 0, 'Female' => 0 ];
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$array[$row["radiob"]]++;
echo $row["radiob"] . "<br>";
}
} else {
echo "0 results";
}
$conn->close();
echo "Male {$array['Male']}\n";
echo "Female {$array['Female']}\n";
Вы должны изменить код, используя группу по предложению, чтобы выглядеть так
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT radiob,COUNT(*) as total FROM 'playertest' group by radiob";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row["radiob"] . ": ".$row["total"]."<br>";
}
} else {
echo "0 results";}
$conn->close();
?>