Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> [mysql][php] Pole typu json, problem z normalizacją
jol.us_
post 19.10.2017, 10:58:57
Post #21





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 10.12.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Tak używam tylko w WHERE .
  1. WHERE json_extract(tresc, '$.klucz') LIKE '%".$string ."%'
  2. WHERE json_contains(tresc, '{\"klucz\" : [\"".$integer."\"]}' ) ";


W dodatku tylko w jednym typie przypadku.
Możesz coś szerzej co to CAST?

Ten post edytował jol.us_ 19.10.2017, 11:02:32


--------------------
run Forest run ...
Go to the top of the page
+Quote Post
trueblue
post 19.10.2017, 11:02:50
Post #22





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. SELECT pole_json, inne_pole FROM tabela WHERE JSON_EXTRACT(CAST(pole_json AS JSON), '$.tytul')

https://dev.mysql.com/doc/refman/5.7/en/cas...l#function_cast

Ten post edytował trueblue 19.10.2017, 17:08:54


--------------------
Go to the top of the page
+Quote Post
jol.us_
post 19.10.2017, 11:15:14
Post #23





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 10.12.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Genialne. Dokładnie to czego potrzebowałem.
Dzięki tobie się wyśpię dziś wink.gif


--------------------
run Forest run ...
Go to the top of the page
+Quote Post
Pilsener
post 20.10.2017, 07:40:58
Post #24





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Kod
{"kolor": "#ffffff", "zdjecie": "test.jpg", "tytul": "Tytul", "kolejnosc":[{"0":"tytul", "1":"kolor", "2":"zdjecie" }]}


A nie prościej byłoby:
Kod
{"kolor": {wartosc: "#ffffff", kolejnosc: 2}, "zdjecie": {wartosc: "test.jpg", kolejnosc: 3}}

Lub:
Kod
{2: {klucz: "kolor", wartosc: "#ffffff"}, 0: {klucz: "tytuł", wartosc: "Tytuł"}


I jak najmniej logiki w bazie danych, bo to się potem mści (szczególnie w MySQL, bo ta baza ma tą cudowną właściwość, że np. zamiast zwrócić komunikat błędu to po prostu przytnie sobie string gdy jest za długi).
Jeśli tylko jest to możliwe, to powinniśmy unikać zapisywania danych w taki sposób.
Go to the top of the page
+Quote Post
jol.us_
post 20.10.2017, 13:57:49
Post #25





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 10.12.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat(Pilsener @ 20.10.2017, 08:40:58 ) *
A nie prościej byłoby:
Kod
{"kolor": {wartosc: "#ffffff", kolejnosc: 2}, "zdjecie": {wartosc: "test.jpg", kolejnosc: 3}}

Dość trudno by mi było to potem sortować.


Cytat(Pilsener @ 20.10.2017, 08:40:58 ) *
Kod
{2: {klucz: "kolor", wartosc: "#ffffff"}, 0: {klucz: "tytuł", wartosc: "Tytuł"}

Jako klucz mam stringa i nie moge uzyc integera.


Cytat(Pilsener @ 20.10.2017, 08:40:58 ) *
I jak najmniej logiki w bazie danych, bo to się potem mści (szczególnie w MySQL, bo ta baza ma tą cudowną właściwość, że np. zamiast zwrócić komunikat błędu to po prostu przytnie sobie string gdy jest za długi).
Jeśli tylko jest to możliwe, to powinniśmy unikać zapisywania danych w taki sposób.


Ten json to był tylko przykład - użyty tylko dla nakreślenia problemu - nie ma nic wspólnego z oryginalnym wyglądem.
Tak czy siak uważam, że json to jeden z najbardziej wygodnych formatów przechowywania danych - zwłaszcza, że potem są przejmowane przez front-end.

O ilość znaków się nie martwię - tu nie mam takiego niebezpieczeństwa.

----

Tak czy siak. Ostatecznie pozostałem przy formacie pola longtext i użyłem rozwiązania od @trueblue.
Dla mnie ten temat jest zamknięty.

Ten post edytował jol.us_ 20.10.2017, 13:59:26


--------------------
run Forest run ...
Go to the top of the page
+Quote Post

2 Stron V  < 1 2
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 00:36