Подсчет определенных строк в базе данных и отображение только значений, превышающих 0 в этом одном столбце

#php #mysql

#php #mysql

Вопрос:

Я пытаюсь отобразить некоторые значения из базы данных, и у меня возникли некоторые проблемы с отображением правильной информации.

В моей базе данных есть столбец с именем coplevel , который имеет значения перечисления до 7.

С моей стороны PHP, я пытаюсь подсчитать всех пользователей в базе данных, у которых coplevel > 0, но то, что я пробовал на SOF, работает, но не так, как я хочу, чтобы это работало.

Итак, если у меня есть 5 пользователей с уровнем cop 1,2,3,4,5, я хочу считать только пользователей, у которых уровень cop больше 0

 <?php
$sql = "SELECT COUNT(*) FROM `players` WHERE `coplevel` > 0";
if ($result = mysqli_query($link, $sql)) {
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_array($result)) {
            $totalc = $row['0'];
            echo "<b>" . $totalc . "</b>";
        }
        mysqli_free_result($result);
    } else {
        $totalc = "Couldn't find cop info";
    }
} else {
    echo "ERROR: Could not execute $sql. " . mysqli_error($link);
}
?>
  

Если есть 5 пользователей, у которых у всех значение coplevel больше 0, тогда посчитайте и отобразите только те, у которых > 0 в качестве их coplevel

Комментарии:

1. Ваш текущий запрос count уже кажется правильным. В чем проблема с этим, или какой результат вы хотите здесь увидеть?

2. Итак, я просто хочу, чтобы он отображал количество пользователей с коплевелом больше 0, но, похоже, это не так. Если я изменю уровень моего тестового аккаунта, скажем, на .. 4, это изменит php, опубликованный выше, изменит значение на 1, но если я верну значение на 0, php, опубликованный выше, не изменит значение обратно. Таким образом, он по-прежнему регистрирует 1 элемент как имеющий уровень выше 0, когда для него установлено значение 0 в базе данных. Имеет ли это смысл?

3. Пожалуйста, включите примеры данных из players таблицы. Происходит что-то, о чем вы нам не рассказываете.

4. Не уверен, как получить некоторые примеры данных, все еще новичок в этом.. Какие данные вы хотели бы?

5. Есть ли у вас какие-либо записи, соответствующие этим критериям?

Ответ №1:

Ваш запрос правильный, но вы напутали с $row массивом.

Это:

 while ($row = mysqli_fetch_array($result)) 
  

Вернет строки в ассоциативный массив, называемый $row

Ассоциативный массив хранит пары КЛЮЧЕЙ и ЗНАЧЕНИЙ

В этом случае ключом является имя столбца, а значением — данные в столбце.

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

Когда вы говорите :

 $totalc = $row['0'];
  

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

Что вы хотите сделать, так это получить индекс 0. Итак, вы должны сказать :

 $totalc = $row[0];
  

Более понятной альтернативой является правильное присвоение псевдонима вашему COUNT (*) в запросе, чтобы иметь правильное имя для его ключа в вашем массиве :

 $sql = "SELECT COUNT(*) AS cnt FROM `players` WHERE `coplevel` > 0";
if ($result = mysqli_query($link, $sql)) {
    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_array($result)) {
            $totalc = $row['cnt'];