Как отобразить количество отправленных значений переключателей, используя PHP [duplicate]

0

Я пытаюсь показать общее количество представленных значений переключателя, в моей предыдущей форме есть выбор между "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
Теги:
count
group-by

3 ответа

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

В летнее время лучшим способом является объединение его по запросу, но у вас могут быть другие данные, кроме того, что вам нужно (например, имя), в этом случае второй метод.

Ура!

0

Вот возможное решение. Существуют различные способы сделать это, и я не на 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";
0

Вы должны изменить код, используя группу по предложению, чтобы выглядеть так

<?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();
?> 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню