@TheAlexMir
web developer

PHP как суммировать массив по ключам?

Добрый день! Уже два дня бьюсь над одной задачей, и никак не найду решение.

Собственно, принципе: есть бот в телеграмме, который записывает результаты дистанции участников в км. К примеру - пользователь написал результат "5.5", бот обработал и записал в БД в таблицу results *имя пользователя* - 5.5.

Потом каждое воскресенье cron выполняет такую задачу: берет данные из таблиц results, собирает такую строку: "1-имя пользователя-километраж,2-имя пользователя-километраж" и т.д., а после сохраняет в таблице archive, где есть такие поля: id, week (текущая неделя), year (текущий год), content(сама строка) и из этих данных строит пользователям отчет за каждую неделю.

Вопрос: отчет за каждую неделю я сделал путем получения через номер недели content из таблицы archive и через explode и циклы перевел значения в читаемый вид. Но вот с годовыми отчетами полный ступор. Везде в archive год проставлен как year = 1. Суть в том, что участники могут быть одни и те же за разные недели и мне надо их результат суммировать.

К примеру, есть такие записи в таблице archive:
Неделя 1: 1-Иван-24.5,2-Владимир-30
Неделя 2: 1-Александр-30.2,2-Иван-20
Неделя 3: 1-Владимир-4,2-Иван-10,3-Александр-5.5

Нужно отобразить:
Иван - 54.5
Александр - 35.5
Владимир - 34

Имена участников могут быть разными.
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
о господи.
никакой таблицы archive, никакого ада с explode, никакого крона и никакого колупания с массивами в пхп тут быть не должно.
в таблице results должно быть поле с датой.
вся нужная информация берется из нее одним запросом
SELECT user, sum(km) FROM results WHERE date BETWEEN начало AND конец GROUP BY user

Вместо начало и конец подставить нужные даты - хоть неделя, хоть месяц, хоть год.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы