PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dotWizard
Отправлено: 24 Марта, 2020 - 13:03:04
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2020  


Помог: 0 раз(а)




Приветствую знатоков. Не знаю у кого ещё спросить. Есть данные json, проблем спарсить данные в принципе нет, если бы не один момент. Я в PHP не силён, но в json данных есть такая конструкция временных штампов"timeseries" и к каждому относятся определённые данные дата(все, плюс, возврат). Поступления и расходы почти каждый день, плюсом филиалы, всё понятно, просто циклом заберу.
Подскажите, как мне их загнать в базу все "timeseries", ну или на край с данными по последней дате, соответственно на PHP, js не подходит для задачи.
CODE (htmlphp):
скопировать код в буфер обмена
  1. [{"index":"",
  2. "filial":"Moskow",
  3. "lastupdate":"2020-03-22T04:42:00.006Z",
  4. "location":{"lat":40,"lng":40},
  5. "filindex":{"qwe1":"MS","qwe2":"MS1"},
  6. "timeseries":{"1/22/20":{"all":2,"plus":0,"vozvr":0},
  7. "3/15/20":{"all":114,"plus":1,"vozvr":35},
  8. "3/16/20":{"all":147,"plus":1,"vozvr":35},
  9. "3/17/20":{"all":177,"plus":1,"vozvr":41},
  10. "3/18/20":{"all":212,"plus":1,"vozvr":42},
  11. "3/19/20":{"all":272,"plus":1,"vozvr":42},
  12. "3/20/20":{"all":322,"plus":1,"vozvr":42},
  13. "3/21/20":{"all":411,"plus":1,"vozvr":42},
  14. "3/22/20":{"all":599,"plus":1,"vozvr":44}}},
  15. {"index":"",
  16. "filial":"voronezh",
  17. "lastupdate":"2020-03-12T04:42:00.006Z",
  18. "location":{"lat":50,"lng":50},
  19. "filindex":{"qwe1":"VR","qwe2":"VR1"},
  20. "timeseries":{"1/22/20":{"all":2,"plus":0,"vozvr":0},
  21. "3/15/20":{"all":839,"plus":22,"vozvr":118},
  22. "3/16/20":{"all":825,"plus":27,"vozvr":144},
  23. "3/17/20":{"all":878,"plus":29,"vozvr":144},
  24. "3/18/20":{"all":889,"plus":29,"vozvr":144},
  25. "3/19/20":{"all":924,"plus":29,"vozvr":150},
  26. "3/20/20":{"all":963,"plus":33,"vozvr":191},
  27. "3/21/20":{"all":1007,"plus":35,"vozvr":232},
  28. "3/22/20":{"all":1086,"plus":40,"vozvr":235}}}]
 
 Top
Vladimir Kheifets
Отправлено: 24 Марта, 2020 - 13:56:11
Post Id



Посетитель


Покинул форум
Сообщений всего: 511
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 24 раз(а)




dotWizard пишет:
Приветствую знатоков. Не знаю у кого ещё спросить. Есть данные json, проблем спарсить данные в принципе нет, если бы не один момент. Я в PHP не силён, но в json данных есть такая конструкция временных штампов"timeseries" и к каждому относятся определённые данные дата(все, плюс, возврат). Поступления и расходы почти каждый день, плюсом филиалы, всё понятно, просто циклом заберу.
Подскажите, как мне их загнать в базу все "timeseries", ну или на край с данными по последней дате, соответственно на PHP, js не подходит для задачи.
CODE (htmlphp):
скопировать код в буфер обмена
  1. [{"index":"",
  2. "filial":"Moskow",
  3. "lastupdate":"2020-03-22T04:42:00.006Z",
  4. "location":{"lat":40,"lng":40},
  5. "filindex":{"qwe1":"MS","qwe2":"MS1"},
  6. "timeseries":{"1/22/20":{"all":2,"plus":0,"vozvr":0},
  7. "3/15/20":{"all":114,"plus":1,"vozvr":35},
  8. "3/16/20":{"all":147,"plus":1,"vozvr":35},
  9. "3/17/20":{"all":177,"plus":1,"vozvr":41},
  10. "3/18/20":{"all":212,"plus":1,"vozvr":42},
  11. "3/19/20":{"all":272,"plus":1,"vozvr":42},
  12. "3/20/20":{"all":322,"plus":1,"vozvr":42},
  13. "3/21/20":{"all":411,"plus":1,"vozvr":42},
  14. "3/22/20":{"all":599,"plus":1,"vozvr":44}}},
  15. {"index":"",
  16. "filial":"voronezh",
  17. "lastupdate":"2020-03-12T04:42:00.006Z",
  18. "location":{"lat":50,"lng":50},
  19. "filindex":{"qwe1":"VR","qwe2":"VR1"},
  20. "timeseries":{"1/22/20":{"all":2,"plus":0,"vozvr":0},
  21. "3/15/20":{"all":839,"plus":22,"vozvr":118},
  22. "3/16/20":{"all":825,"plus":27,"vozvr":144},
  23. "3/17/20":{"all":878,"plus":29,"vozvr":144},
  24. "3/18/20":{"all":889,"plus":29,"vozvr":144},
  25. "3/19/20":{"all":924,"plus":29,"vozvr":150},
  26. "3/20/20":{"all":963,"plus":33,"vozvr":191},
  27. "3/21/20":{"all":1007,"plus":35,"vozvr":232},
  28. "3/22/20":{"all":1086,"plus":40,"vozvr":235}}}]

Добрый день!
Попробуйте сделать так:
Спойлер (Отобразить)
Удачи!

(Отредактировано автором: 24 Марта, 2020 - 13:57:34)

 
 Top
LIME
Отправлено: 24 Марта, 2020 - 14:35:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 10617
Дата рег-ции: Нояб. 2010  


Помог: 320 раз(а)




Vladimir Kheifets эти данные нужны для аналитики, то есть надо разбить на поля(date, all, plus, vozvr) и записать по датам в субд
для небольшого объема по записи в сутки пойдет и mysql
а вообще такое обычно в колоночные субд пишут, они миллионами записей пишут данные за сутки и могут выдавать агрегатные данные за годы(сумма, максимальное/минимальное, среднее) на такой объем за мгновения ока)


-----
DDD
 
 Top
dotWizard
Отправлено: 24 Марта, 2020 - 14:59:31
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2020  


Помог: 0 раз(а)




Vladimir Kheifets Спасибо за подсказки. Сейчас возник вопрос.
CODE (htmlphp):
скопировать код в буфер обмена
  1. $res=json_decode($json); вариант работает
  2. $res=json_decode($json, true); не работает, выдаёт ошибку.

Как я понимаю с ассоциативными массивами работать не будет?

LIME не только для аналитики. На их основе выборочно данные будут из базы формироваться в таблицу, для этого и нужно их в базу запихать. При этом с с json данных будет формироваться график/графики в реальном времени и возможно собираться статистические данные. Есть желание по максимуму всё унести на php.
LIME пишет:
о есть надо разбить на поля(date, all, plus, vozvr) и записать по датам в субд
вот это совершенно верно. Примером сверху мы просто вывели данные, а вот как их распихать по переменным и запихать в базу для дальнейшей аналитики?
Хотя у меня уже мысля что проще все данные подгружать напрямую с json, только насколько возрастут проблемы при дальнейшем допиливании - большой вопрос.

(Отредактировано автором: 24 Марта, 2020 - 15:00:10)

 
 Top
LIME
Отправлено: 24 Марта, 2020 - 15:19:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 10617
Дата рег-ции: Нояб. 2010  


Помог: 320 раз(а)




dotWizard пишет:
При этом с с json данных будет формироваться график/графики в реальном времени и возможно собираться статистические данные.
это и есть аналитика в широком смысле
весь круг задач по сбору, хранению и отображению аналитической информации называется для краткости "делаю аналитику"
dotWizard пишет:
Хотя у меня уже мысля что проще все данные подгружать напрямую с json, только насколько возрастут проблемы при дальнейшем допиливании - большой вопрос.
Зато ты получишь время на изучение вопроса. Который еще не факт что возникнет с такими малыми объемами
365 - записей на весь год? да наручные часы тебе за пару веков данных обсчет сделают и циферблатом не моргнут
(Добавление)
LIME пишет:
"делаю аналитику"
заметь - не "я работаю аналитиком" )) это разные вещи))


-----
DDD
 
 Top
dotWizard
Отправлено: 24 Марта, 2020 - 15:28:55
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2020  


Помог: 0 раз(а)




LIME пишет:
365 - записей на весь год? да наручные часы тебе за пару веков данных обсчет сделают и циферблатом не моргнут

В том то и проблема что я сюда запостил лишь шаблон данных. Сейчас там порядка 21 тыс строк, вот это печально. Нужно сделать по ним выборку отсеив лишние данные. Проще всего это делать не через js и не руками json править, поэтому и хочу всё запихнуть в базу. Но вот застопорился на этом. Ну да ладно, с этим разберусь, время позволяет.

(Отредактировано автором: 24 Марта, 2020 - 15:34:31)

 
 Top
Vladimir Kheifets
Отправлено: 24 Марта, 2020 - 16:22:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 511
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 24 раз(а)




dotWizard пишет:
Vladimir Kheifets Спасибо за подсказки. Сейчас возник вопрос.
CODE (htmlphp):
скопировать код в буфер обмена
  1. $res=json_decode($json); вариант работает
  2. $res=json_decode($json, true); не работает, выдаёт ошибку.

Как я понимаю с ассоциативными массивами работать не будет?Примером сверху мы просто вывели данные, а вот как их распихать по переменным и запихать в базу для дальнейшей аналитики?
Хотя у меня уже мысля что проще все данные подгружать напрямую с json, только насколько возрастут проблемы при дальнейшем допиливании - большой вопрос.

Дабавил сохранение данных в ассоциативный массив
Из массива сможетет написать сохранение в БД?
Спойлер (Отобразить)
этот код показывает ошибки json
Спойлер (Отобразить)
не советую подгружать напрямую с json в БД

(Отредактировано автором: 24 Марта, 2020 - 16:29:53)

 
 Top
LIME
Отправлено: 24 Марта, 2020 - 17:03:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 10617
Дата рег-ции: Нояб. 2010  


Помог: 320 раз(а)




осталось понять зачем нужен именно ассоциативный массив?
(Добавление)
dotWizard на вот тебе на рассмотрение специальная субд для аналитики
https://clickhouse[dot]tech/docs/ru/


-----
DDD
 
 Top
dotWizard
Отправлено: 25 Марта, 2020 - 06:53:33
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2020  


Помог: 0 раз(а)




Vladimir Kheifets,LIME Спасибо огромное за то что пнули в нужном направлении, вроде получил результат которого ждал.
LIME насчёт ассоциативного массива - гораздо проще работать когда можешь забирать данные по ключу, а не по индексу, особенно в сложных структурах массивов.

Вроде уже сам понимаю как сделать, всем спасибо. Только один вопрос, я в переменную пихаю массив timeseries
CODE (htmlphp):
скопировать код в буфер обмена
  1. $timeseries = $json['timeseries'];
  2.     foreach ($timeseries->$data as $b)

Получаю соответственно массив в переменной b, но только последнее значение. Вроде задача и выполнена
CODE (htmlphp):
скопировать код в буфер обмена
  1. array timeseries(2) {
  2. ["1/22/20"]=> array(3) { ["all"]=> int(2) ["plus"]=> int(0) ["vozvr"]=> int(0) }
  3. ["3/15/20"]=> array(3) { ["all"]=> int(114) ["plus"]=> int(1) ["vozvr"]=> int(35) }
  4.  
  5. array b(2) {
  6. array (3) => ["all"]=> int(2) ["plus"]=> int(0) ["vozvr"]=> int(0)  
  7. array (3) => ["all"]=> int(114) ["plus"]=> int(1) ["vozvr"]=> int(35)

Подскажите, как забрать дату правильно из timeseries? И как можно все массивы по датам забрать, а не только последние. Это уже для собственного развития, вдруг где придётся такой функционал внедрять. Заранее спасибо.
 
 Top
Vladimir Kheifets
Отправлено: 25 Марта, 2020 - 08:18:56
Post Id



Посетитель


Покинул форум
Сообщений всего: 511
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 24 раз(а)




dotWizard пишет:
Vladimir Kheifets,LIME Спасибо огромное за то что пнули в нужном направлении, вроде получил результат которого ждал.
LIME насчёт ассоциативного массива - гораздо проще работать когда можешь забирать данные по ключу, а не по индексу, особенно в сложных структурах массивов.

Вроде уже сам понимаю как сделать, всем спасибо. Только один вопрос, я в переменную пихаю массив timeseries
CODE (htmlphp):
скопировать код в буфер обмена
  1. $timeseries = $json['timeseries'];
  2.     foreach ($timeseries->$data as $b)

Получаю соответственно массив в переменной b, но только последнее значение. Вроде задача и выполнена
CODE (htmlphp):
скопировать код в буфер обмена
  1. array timeseries(2) {
  2. ["1/22/20"]=> array(3) { ["all"]=> int(2) ["plus"]=> int(0) ["vozvr"]=> int(0) }
  3. ["3/15/20"]=> array(3) { ["all"]=> int(114) ["plus"]=> int(1) ["vozvr"]=> int(35) }
  4.  
  5. array b(2) {
  6. array (3) => ["all"]=> int(2) ["plus"]=> int(0) ["vozvr"]=> int(0)  
  7. array (3) => ["all"]=> int(114) ["plus"]=> int(1) ["vozvr"]=> int(35)

Подскажите, как забрать дату правильно из timeseries? И как можно все массивы по датам забрать, а не только последние. Это уже для собственного развития, вдруг где придётся такой функционал внедрять. Заранее спасибо.


Добрый день!
советую в таких случаях,когда требуется увидеть структуру данных, вмето var_dump использовать print_r
Добавил:
Спойлер (Отобразить)
Обратите внимние на то, что timeseries не массив, а stdClass Object
PHP:
скопировать код в буфер обмена
  1. $timeseries = $json['timeseries'];
  2. foreach ($timeseries->$data as $b)
возвращает stdClass Object для заданной даты, например, для даты 1/22/20
PHP:
скопировать код в буфер обмена
  1. [1/22/20] => stdClass Object
  2. (
  3.     [all] => 2
  4.     [plus] => 0
  5.     [vozvr] => 0
  6. )

хотите несколько см. цикл в моём коде.
Удачи!

(Отредактировано автором: 25 Марта, 2020 - 08:20:33)

 
 Top
dotWizard
Отправлено: 25 Марта, 2020 - 09:03:59
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2020  


Помог: 0 раз(а)




Vladimir Kheifets Спасибо большое за подсказки. вроде во всём разобрался. Жаль пока плюсовать не могу.
 
 Top
Vladimir Kheifets
Отправлено: 25 Марта, 2020 - 10:09:46
Post Id



Посетитель


Покинул форум
Сообщений всего: 511
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 24 раз(а)




dotWizard пишет:
Vladimir Kheifets Спасибо большое за подсказки. вроде во всём разобрался. Жаль пока плюсовать не могу.

Что Вы не можете плюсовать?

(Отредактировано автором: 25 Марта, 2020 - 10:10:06)

 
 Top
LIME
Отправлено: 25 Марта, 2020 - 11:42:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 10617
Дата рег-ции: Нояб. 2010  


Помог: 320 раз(а)




Vladimir Kheifets до 50 не может
давай я тебя плюсану, только пообещай не цитировать больше всей простыней пост на который отвечаешь))
хотябы в спойлер убирай если никак иначе))
(Добавление)
вместо кнопки "ответ" можно юзать кнопку "цитата", выделив строку на которую важно ответить


-----
DDD
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB