• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Pobieranie danych json z bazy.

Object Storage Arubacloud
0 głosów
645 wizyt
pytanie zadane 7 grudnia 2020 w PHP przez Bakkit Dyskutant (7,600 p.)
zamknięte 10 grudnia 2020 przez Bakkit

Witam.

Dostałem zadanie, aby pobrać wartość nick oraz level z tabeli players i na podstawie tego ułożyć ranking graczy. Spodziewałem się, że w tej tabeli będą osobne kolumny z tymi wartościami, natomiast w tabeli znajdują się tylko 2 kolumny gdzie pierwsza to unikalny identyfikator a druga to json, gdzie są różnego rodzaju informacje oraz statystyki takiego gracza, np. level, exp, nick, łączny czas gry itd.

Czy da radę stworzyć zapytanie, które wyciągnie tylko 10 najlepszych użytkowników (level, nick) bez wyciągania całego jsona, oraz bez zbytniego obciążania bazy? Dodam jeszcze, że aplikacja jest napisana w Laravelu.

 

Pozdrawiam!

komentarz zamknięcia: https://forum.pasja-informatyki.pl/520235/pobieranie-danych-json-z-bazy?show=520240#a520240

1 odpowiedź

+2 głosów
odpowiedź 7 grudnia 2020 przez senpai desu Mądrala (5,720 p.)
wybrane 10 grudnia 2020 przez Bakkit
 
Najlepsza

Zapoznaj się z dokumentacją https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

demonstrują użycie metod pozwalających na wyszukiwanie i sortowanie po wartościach z JSON

wycinek ze strony

mysql> SELECT c, c->"$.id", g, n
     > FROM jemp
     > WHERE JSON_EXTRACT(c, "$.id") > 1
     > ORDER BY c->"$.name";

bez problemu można wybrać wartości z dowolnych pól i na ich podstawie wygenerować wynik

komentarz 8 grudnia 2020 przez Bakkit Dyskutant (7,600 p.)

Ok, a mógłbyś jeszcze pomóc przy printowaniu zwracanych danych?

Całą odpowiedź zapisuje do zmiennej $islands. Tak wygląda jej zawartość:

array:1 [▼
  0 => {#286 ▼
    +"IslandLevels.json->"$.level"": "0"
    +"Islands.json->"$.owner"": ""xxx""
  }
]

Natomiast gdy wyświetlam $islands[0]:

{#286 ▼
  +"IslandLevels.json->"$.level"": "0"
  +"Islands.json->"$.owner"": ""xxx""
}

 

komentarz 8 grudnia 2020 przez Bakkit Dyskutant (7,600 p.)
Aktualnie z tabeli pobieram tylko jednego usera, bo tylko tyle znajduje się w bazie - w przyszłości będzie ich więcej.

 

No i jak widać obie wartości są pobierane z innych tabel w bazie.
komentarz 9 grudnia 2020 przez senpai desu Mądrala (5,720 p.)

Dodaj etykiety/aliasy do kolumn w zapytaniu SQL wtedy w wynikach powinieneś otrzymać  wygodniejszy zapis kluczy

przykładowo:

SELECT c, 
JSON_EXTRACT(c, "$.level") as level
from ..

## lub 
SELECT c, 
 c->"$.level" as level
 from ..

wyświetl potem $islands[0] za pomocą print_r() 

 

 

 

Podobne pytania

+2 głosów
0 odpowiedzi 575 wizyt
–2 głosów
1 odpowiedź 241 wizyt
pytanie zadane 30 czerwca 2016 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
2 odpowiedzi 288 wizyt
pytanie zadane 29 listopada 2015 w PHP przez Widemo Użytkownik (920 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...