Przetwarzanie JSON w MySql

Przetwarzanie JSON w MySql
misio_
  • Rejestracja:12 miesięcy
  • Ostatnio:około 19 godzin
  • Postów:61
0

Powiedzmy, że mam taką tabelę:

Kopiuj
id=1, json={"1":{"id":1,"value":2},"2":{"id":2,"value":2},"3":{"id":3,"value":2}}
id=2, json={"2":{"id":2,"value":2},"3":{"id":3,"value":2},"4":{"id":5,"value":2}}

Chciałbym móc zsumować wartości dla wszystkich rekordów o danym id, Id pobieram tak:

Kopiuj
SELECT json_keys(json) from test;

Jak mogę uzyskać taki set:

Kopiuj
(1, 2), (2, 4), (3, 4), (5,2)

Mam na myśli, że po zsumowaniu values dla danego ID otrzymuję daną sumę. Jak to zrobić?
Sory jeżeli zagmatwałem pytanie... 🙁

DR
  • Rejestracja:około 12 lat
  • Ostatnio:około 21 godzin
  • Postów:1131
3
edytowany 1x, ostatnio: Dregorio
misio_
  • Rejestracja:12 miesięcy
  • Ostatnio:około 19 godzin
  • Postów:61
0

Bardzo dziękuję! Mysql dlatego, że klient akurat ma na tym sklep. Dzięki! 😃

Tylko, że nie działa mi to w PhpMyAdmin:

Analiza statyczna:
1 błędów zostało znalezionych podczas analizy.
Unrecognized statement type. (near "WITH" at position 0)

Zaznaczę, że ja mam MySql bez MariaDB

edytowany 2x, ostatnio: misio_
misio_
Oki, działa, tylko phpmyadmin się pluje, ale zwraca wynik, dzięki!
misio_
  • Rejestracja:12 miesięcy
  • Ostatnio:około 19 godzin
  • Postów:61
0

Znalazłem takie zapytanie:

Kopiuj
SELECT 
  JSON_EXTRACT(json, "$.*.id") as id, 
  SUM(JSON_EXTRACT(json, "$.*.value")) as value
  FROM test
  GROUP BY JSON_EXTRACT(json, "$.*.id");

https://www.db-fiddle.com/f/3u6hW2YSfE6sgGqan1izAg/0

Wynik jest dziwny, ale dlaczego?

DR
  • Rejestracja:około 12 lat
  • Ostatnio:około 21 godzin
  • Postów:1131
0

@misio_: Co to znaczy dziwny?

Jak już bardzo chcesz to lepiej tak https://www.db-fiddle.com/f/3u6hW2YSfE6sgGqan1izAg/1

EDIT.
Jak zobaczysz swoje zapytanie i fragment:

Kopiuj
JSON_EXTRACT(json, "$.*.id") as id

To po uruchomieniu dostaniesz:

id
[1,2,3]
[2,3,4]

Czyli dostajesz array z wartościami. Dalej, group by nie obsługuje json, no i mysql nie umie porozdzielac automatycznie json'a na pojedyncze wiersze.
Tutaj możesz więcej przeczytać https://dev.mysql.com/doc/refman/8.4/en/json-search-functions.html#function_json-extract

edytowany 1x, ostatnio: Dregorio

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.