#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'];