Реализация конкретного запроса count в php

#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’]