#php #mysql
#php #mysql
Вопрос:
class memberclass {
function Available()
{
if(!$this->DBLogin()) {
$this->HandleError("Database login failed!");
return false;
}
$ux = $_SESSION['username_of_user'];
$qry = "Select (one='Not done') (two='Not done') (three='Not done') (four='Not done') (five='Note done') As num_not_done From $this->tablename Where username='$ux'";
$result = mysqli_query($this->connection, $qry);
$result_length = mysqli_num_rows($result);
echo "$result_length";
}
}
Я пытаюсь показать количество доступных элементов. Таким образом, для каждого столбца, где значение «Не выполнено» для пользователя, оно должно суммировать его в запросе, чтобы сформировать общее количество элементов «Не выполнено». Однако, когда я пытаюсь показать это число с помощью следующего кода, я по какой-то причине получаю значение «1» для каждого пользователя:
<?= $memberclass->Available(); ?>
Комментарии:
1. вы слышали о SUM() и GROUP BY?
2. @jakubwrona Я пробовал
"Select SUM((one='Not done') (two='Not done') (three='Not done') (four='Not done') (five='Note done')) As num_not_done From $this->tablename Where username='$ux'";
, но это все равно дает тот же результат3. Я не это имел в виду … не могли бы вы привести пример данных из таблицы, которую вы запрашиваете?
4. @jakubwrona ссылка Итак, что я хочу, чтобы код делал, это подсчитывал количество раз, когда он говорит «Не сделано» для пользователя (так что строка). Итак, я могу реализовать его в HTML как статистику. Задачи не завершены:
<? php code here ?>
для строки в ссылке, которую я вам отправил, будет сказано: Задачи не завершены: 5.5. Почему вы храните строки вместо 1 или 0 для DONE или NOT DONE? Эта проблема связана с тем, как вы храните данные, а не со сложностью запроса.
Ответ №1:
Вам нужно преобразовать выражения в INT, а затем суммировать их. Для базы данных MySQL ваш запрос может выглядеть следующим образом:
SELECT (CAST(one='Not done' AS UNSIGNED)
CAST(two='Not done' AS UNSIGNED)
CAST(three='Not done' AS UNSIGNED)
CAST(four='Not done' AS UNSIGNED)
CAST(five='Not done' AS UNSIGNED)) as num_not_done
FROM tableName WHERE username = 'something'
Комментарии:
1.
$ux = $_SESSION['username_of_user']; $qry = "SELECT (CAST(one='Not done' AS UNSIGNED) CAST(two='Not done' AS UNSIGNED) CAST(three='Not done' AS UNSIGNED) CAST(four='Not done' AS UNSIGNED) CAST(five='Not done' AS UNSIGNED)) as num_not_done FROM $this->tablename WHERE username = '$ux'"; $result = mysqli_query($this->connection, $qry); $result_length = mysqli_num_rows($result); echo "$result_length";
Я все еще получаю результат «1» для каждого пользователя, ваш код звучит логично, но, похоже, он просто не работает. Все, что я знаю, это то, что ответ заключается в запросе.2. количество строк будет равно единице, но единственная строка будет содержать индекс с именем «num_not_done», который будет содержать правильное число. Итак, выполните fetch_array, а затем отобразите $fetched[0][‘num_dot_done’]