TigerWiki
@TigerWiki
Developer

Как сделать многоуровневый JSON с помощью PHP и MySQL?

Какой самый простой способ сформировать такой JSON

{
  "response": {
    "data": [
      {
        "month": "2014-07-01",  // данные групируються по месяцам, а это собственно месяц
        "managers": [
          {
            "name": "Dixie Powell",
            "deal_count": 23,
            "sale_sum": 2853
          },
          ...
        ]
      },
      ...
    ]
  }
}


из таблицы данных MySQL, например:

id, date, manager_name, sale_total
1, '2014-07-02 11:52:00', 'Dixie Powell', 200
2, '2014-07-05 13:37:00', 'Dixie Powell', 3000
3, '2014-07-05 12:45:00', 'Elma Hester', 3029
....

Как решение:

Получить все месяца:
SELECT 
    DATE_FORMAT(`date`, '%Y-%m-01') AS `Месяц`
FROM
    manager_sales
GROUP BY YEAR(`date`) , MONTH(`date`)
ORDER BY `Месяц`


Потом в PHP цикле для каждого месяца делать запрос к MySQL: а дайка мне информацию по всем продавцам за этот месяц.

А если у продавцов еще вложения какие то будут? Разве так это делается?
  • Вопрос задан
  • 951 просмотр
Решения вопроса 1
@mib
SELECT 
          DATE_FORMAT(`date`, '%Y-%m') AS months, 
          `manager_name`, 
          COUNT(`manager_name`) AS deal_count, 
          SUM(`sale_total`) AS sale_sum
FROM `manager_sales`
GROUP BY  DATE_FORMAT(`date`, '%Y-%m'), `manager_name`
ORDER BY `date`,  `manager_name`

Получатся почти необходимые строки
Останется только набить массив и сделать json_encode
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@AlikDex
Подгружать динамически по клику нужное? Сам недавно столкнулся. Убил два дня на решение, но так и не нашел. Решил таким способом. В конце концов, далеко не каждый раз требуется смотреть статистику за прошлые месяца, поэтому доставать данные сразу смысла особо нет. А циклами как-то жестко получается, тем более если данных очень много.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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