kamil88
18.06.2015, 09:20:49
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
18.06.2015, 09:29:33
zmienić koncepcję. Zapisywać te dane w oddzielnej tabeli tak jak to się powinno robić.
PS. Jest możliwe. W bazach typu NoSQL
kamil88
18.06.2015, 09:38:09
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
18.06.2015, 09:41:17
kamil88
18.06.2015, 10:00:17
czyli konkretnie jak musiałbym napisać to zapytanie?
Pyton_000
18.06.2015, 10:13:09
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
18.06.2015, 13:56:09
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
18.06.2015, 15:00:48
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.