#php #mysql #loops #while-loop #sum
#php #mysql #циклы #цикл while #сумма
Вопрос:
У меня есть эта таблица (например)
id userId totalHours isOt
1 1 0830 1
2 4 0630 0
3 1 0730 0
4 2 0900 1
Мне нужно найти общее количество часов для каждого пользователя, но они должны быть показаны один раз для каждого пользователя (группа по)
И затем, если общее количество часов было присвоено как OT (с течением времени == 1), разница между общим количеством часов минус 0800часов также должна быть суммирована и показана в другом столбце.
Я пытался объединить эту таблицу с user table, но цикл кажется настолько неправильным, что в итоге все последние значения в каждом цикле суммируются с другими.
Надеюсь, найдется кто-нибудь, кто может помочь, и мы ценим вашу помощь
Комментарии:
1. Можете ли вы показать код того, что вы пробовали, чтобы люди могли помочь вам найти то, что было неправильным?
Ответ №1:
Сделайте это в своем запросе к базе данных, а не в PHP:
SELECT UserId,
SUM(totalHours) AS totalTime,
SUM(IF(isOt, totalhours-800, 0)) AS totalOt
FROM yourTable
GROUP BY UserId
Комментарии:
1. Привет, Бармар, как я могу опубликовать таблицу внутри этого вопроса, я не знаю, как опубликовать здесь код.
2. Вставьте предварительно отформатированный текст, затем используйте
{}
инструмент разметки кода.3. Привет, Бармар, я внес исправление. И после попытки выполнения вашего предложенного запроса, некоторая строка, у которой общее количество часов меньше 0800, возвращает отрицательное значение (произошло вычитание)
4. Если вы не хотите допускать отрицательные значения, используйте
GREATEST(0, totalHours-800)
.5. Кстати, являются ли эти времена обычными числами, которые можно добавлять и вычитать, или они
HHMM
? Вам нужно преобразовать их в обычные числа, чтобы использовать с ними обычную арифметику.