• 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.

VPS Starter Arubacloud
0 głosów
623 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 572 wizyt
–2 głosów
1 odpowiedź 238 wizyt
pytanie zadane 30 czerwca 2016 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
2 odpowiedzi 286 wizyt
pytanie zadane 29 listopada 2015 w PHP przez Widemo Użytkownik (920 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...