Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dane json w tabeli i wyszukiwanie wartości na podstawie warunku
kamil88
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 18.06.2015

Ostrzeżenie: (10%)
X----


Witam,
mam takie pytanie a kompletnie nie mogę znaleźć tego w internecie i obawiam się że nie da się tego zrobić tak jak ja chce.

robię serwis ogłoszeniowy który pozwala na dodawanie "dodatkowych opcji" do ogłoszeń z listy zdefinowanych przez administratora. Są one zapisywane do jednej komórki w bazie danych poprzez polecenie:

json_encode($_POST['opcje_dodatkowe'], JSON_UNESCAPED_UNICODE)

odczytuje je z bazy oczywiście korzystając z json_decode

w bazie to mniej więcej wygląda tak:

{"18":"elektronika","21":"coś tam","22":"wybór 3","23":"456","24":"2015"}

gdzie pierwsza liczba to id opcji a druga to wartość wybrana lub wpisana przez użytkownika

no i wszystko byłoby ok gdyby nie wyszukiwarka ogłoszeń...

bo jeśli wyszukuje tekst to mogę sobie dać warunek:

opcje_dodatkowe REGEXP '"21":"([^"]*)coś([^"]*)"'

21 - to id opcji
coś - to co wpisał użytkownik w wyszukiwarce

i znajduje poprawnie.

ale tam są też pola liczbowe i tutaj fajnie by było żeby móc wpisać zakres liczb (np rocznik od 2005 do 2010)
i tutaj nie wiem jakie zrobić zapytanie to mysql żeby wykorzystać zarówno REGEXP (lub like) ale także operator > (greater) żeby znaleźć wartość wyższą od wpisanej

czyli z przykładowych trzech wpisów do bazy danych:
{"24":"2015"}
{"24":"2000"}
{"24":"2008"}

żeby mi wyciągnęło tylko ostatni (pomiędzy 2005 a 2010)

jest to w ogóle możliwe?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


zmienić koncepcję. Zapisywać te dane w oddzielnej tabeli tak jak to się powinno robić.

PS. Jest możliwe. W bazach typu NoSQL

Ten post edytował Pyton_000 18.06.2015, 09:30:18
Go to the top of the page
+Quote Post
kamil88
post
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 18.06.2015

Ostrzeżenie: (10%)
X----


Myślałem o takim rozwiązaniu, jest znacznie prostsze w obsłudze ale ma jedną poważną wadę: ograniczenie ilości opcji.
chciałbym żebym w skrypcie który tworzę administrator mógł dodać nieskończenie wiele opcji dodatkowych i to różnych dla różnych kategorii (np w motoryzacja: rocznik, powypadkowy a w obuwie: rozmiar, damskie/męskie itd.) i dlatego pomyślałem że tak będzie najlepiej i wszystko byłoby ok gdyby nie ta wyszukiwarka...
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Jest możliwe. W postgreSQL, który posiada typ JSON (IMG:style_emoticons/default/smile.gif) http://www.postgresql.org/docs/9.4/interac...atype-json.html
Go to the top of the page
+Quote Post
kamil88
post
Post #5





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 18.06.2015

Ostrzeżenie: (10%)
X----


czyli konkretnie jak musiałbym napisać to zapytanie?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Czemu uważasz że trzymanie opcji w oddzielnej tabeli ma jakieś wady?

Przecież tworzysz tabelę:
id_produktu | id_opcji | wartość

W takiej strukturze możesz mieć pierdyliard opcji dla jednego produktu. Dodatkowo nie bawisz się jakimiś dziwactwami typuj json które nie służą do trzymania danych w RDBM
Go to the top of the page
+Quote Post
kamil88
post
Post #7





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 18.06.2015

Ostrzeżenie: (10%)
X----


ok dzięki wielkie, pewnie będę musiał stworzyć tą dodatkową tabelę z wartościami opcji

ale to jeszcze dla pewności sie spytam: w taki sposób jak jest teraz (json zapisany w bazie danych) nie da się napisać takiego zapytania do mysql żeby znalazło wyniki w jakimś przedziale?
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

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


Mysql nie dorobił się jeszcze typu JSON chociaż już od dłuższego czasu nad tym pracują.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 17.09.2025 - 16:08