Столбец суммы возвращает неточный результат - PullRequest
0 голосов
/ 15 февраля 2019

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

Например, если таблица содержит 3 строки, например:

  1. 10
  2. 15
  3. 20

Сумма этого столбца ДОЛЖНА быть 45, но вместо этого код, который я использую, вернет 35 и полностью пропустит первую строку таблицы.

Вот мой текущий код:

// GET THE DATA FROM THE 'DURATION' COLUMN
$sql = mysqli_query($mysqli,"SELECT SUM(duration) AS total FROM timesheet WHERE username='$qname' AND payperiod='$payperiod'");

// LOOP AND ADD ALL THE DATA IN THE DURATION COLUMN
while ($result = mysqli_fetch_assoc($sql))
{ 
   $duration = $result['total'];
}

Чего мне не хватает?Код работает до тех пор, пока он выполняется, и выдает сумму, назначенную переменной $ duration, однако сумма суммы неверна и, кажется, всегда пропускает первую строку таблицы в столбце для суммирования.

На следующем снимке экрана суммируемый столбец - это столбец «DURATION» в первой таблице.Затем сумма преобразуется в десятичное представление часов и отображается в столбце «ВСЕГО ЧАСОВ» второй таблицы.Независимо от того, какие значения вводятся в таблицу, конечный результат, ВСЕГО ЧАСОВ всегда пропускает данные из первой строки.

Screenshot of output

Когда яЗапустив те же запросы в самой базе данных MySQL, минуя PHP, я получаю те же результаты.Ниже приведены скриншоты запросов, выполняемых в базе данных.

Это запрашиваемые строки

Это сумма результата, возвращаемого базой данных

Из скриншотов видно, что найдено 3 записи, первая запись имеет продолжительность 13,38 часа, вторая запись - 0,19 часа, третья запись - 0,05 часа, но полученная суммапо базе данных составляет 888 секунд или 0,24 часа.

1 Ответ

0 голосов
/ 15 февраля 2019

Нашел решение.Я изменил запрос с:

$xxy = mysqli_query($mysqli,"SELECT SUM(duration) AS totalsum FROM timesheet WHERE username='$qname' AND payperiod='02/14/2019 - 02/21/2019'");

$xxy = mysqli_query($mysqli,"SELECT SUM(duration) AS totalsum FROM timesheet WHERE username='$qname' AND status='CLOCKED OUT' AND (timestamp_in BETWEEN '$start_date' AND '$end_date')");

Изменение запросов решило проблему, но я не выяснил причину проблемы.Независимо от того, как я написал запросы, возвращенные результаты были одинаковыми, но сумма была неправильной в первом запросе и верной во втором.

Спасибо всем за ваш вклад и помощь в решении этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...