Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dane json w tabeli i wyszukiwanie wartości na podstawie warunku
Forum PHP.pl > Forum > Bazy danych
kamil88
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?
Pyton_000
zmienić koncepcję. Zapisywać te dane w oddzielnej tabeli tak jak to się powinno robić.

PS. Jest możliwe. W bazach typu NoSQL
kamil88
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...
mmmmmmm
Jest możliwe. W postgreSQL, który posiada typ JSON smile.gif http://www.postgresql.org/docs/9.4/interac...atype-json.html
kamil88
czyli konkretnie jak musiałbym napisać to zapytanie?
Pyton_000
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
kamil88
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?
viking
Mysql nie dorobił się jeszcze typu JSON chociaż już od dłuższego czasu nad tym pracują.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.