Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
[MySQL] Gdzie zapisać kilka wybranych opcji z x dostępnych?
#1
Witam

Stoję właśnie przed pewnym wyborem i proszę Was o radę, które rozwiązanie uważacie za lepsze.

Tworzę stronę, której jednym z elementów jest katalog samochodów. Stworzyłem już bazę danych marek i modeli. Teraz, użytkownicy dodając konkretny samochód mają mieć możliwość zaznaczenia pewnych opcji. Opcje te mają być ustalone przez admina i są "typu binarnego", tzn. albo są, albo nie. Wśród opcji ma być np. klimatyzacja, autamtyczna skrzynia biegów, szyberdach, skórzana tapicarka, wbudowany GPS. Te opcje dodawane są do tabeli pojazdy_opcje, która ma tylko dwa pola: id oraz nazwę opcji.

Nie potrafię się zdecydować między dwoma strategiami zapisywania wybranych opcji. Załóżmy, że z wcześniej wymienionych użytkownik zaznaczył, że ma klimę, skórę i gps. I tak:

Pomysł 1:
W bazie danych dodaję tablicę pojazdy_opcje_wybrane, która ma trzy kolumny: id, id_opcji oraz id_pojazdu. W momencie, kiedy będę potrzebował tych danych (czyli na stronie danego pojazdu) wrzucam szybciutko takie zapytanie:

Kod PHP:
SELECT id_opcji FROM pojazdy_opcje_wybrane WHERE id_pojazdu=$_GET['pojazd'

I dostaję listę wybranych opcji. Jeszcze muszę przerzucając wyniki tego zapytania, dla każdego osobnego znalezionego rekordu wysłać jeszcze zapytanie o nazwę opcji z tablicy pojazdy_opcje.
Problemem tutaj wydaje mi się też wielkość tablicy, bo przy np. 30 opcjach do wyboru i kilkuset pojazdach to ta tablica już będzie spora...

Pomysł 2:
W tablicy pojazdy mamy pole wybrane_opcje, gdzie wrzucamy oddzielane średnikiem identyfikatory opcji. Skomplikowane jest wyciągnięcie tych opcji, bo najpierw muszę wyciągnąć z bazy wartość pola wybrane_opcje, a potem przez explode() i pętle foreach dla każdego identyfikatora opcji wysłać zapytanie do bazy o jego nazwę...


Pomysł 3 (właśnie przyszedł mi do głowySmile):
Tablica pojazdy_opcje ma nie dwa, ale trzy pola. Dodatkowe to pojazdy. W tym polu, które ma typ text dodaję oddzielone średnikiem id pojazdów, dla których wybrano konkretne opcje.
Wywołanie danych na stronie jest w miarę proste: muszę znaleźć w bazie te opcje, dla których w polu pojazdy występuje identyfikator pojazdu, czyli mniej więcej coś takiego:

Kod PHP:
SELECT nazwa_opcji FROM pojazdy_opcje WHERE pojazdy LIKE $_GET['pojazd'

(wiadomo, że tam trzeba jeszcze ten średnik, bo szukająć id=1 znajdę m.in. 101, 23941, 11 itd itd)
To chyba jest najlepsze rozwiązanie... Łatwe do użycia, jednym zapytaniem znajduję wszystkie zaznaczone opcje, no i nie tworzę kolejnych 20 rekordów w bazie dla każdego pojazdu.



Proszę o Wasze opinie a propos tego problemu i z góry dzięki za pomoc Smile

Pozdrawiam
Przemek
Odpowiedz


Wiadomości w tym wątku
[MySQL] Gdzie zapisać kilka wybranych opcji z x dostępnych? - przez pkwiecien - 27-08-2009, 03:59

Podobne wątki…
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Jak sprawdzić czy adres www znajduje sie w bazie mysql? jarekcda 8 9,035 13-05-2017, 01:02
Ostatni post: miketodson255
  Optymalizacja MySQL-a tomek_00 1 3,930 01-09-2013, 13:31
Ostatni post: hieroshima
  [MySQL] Struktura bazy dla słownika msx83 2 3,929 24-08-2013, 16:26
Ostatni post: msx83
  Komunikacja PHP z MySQL na serwerze pawstrze 5 6,455 16-07-2013, 15:58
Ostatni post: Engine
  [MySQL] wyszukiwarka problem darlowiak 3 3,562 13-06-2013, 12:58
Ostatni post: darlowiak

Skocz do:


Użytkownicy przeglądający ten wątek:
Sponsorzy i przyjaciele
SeoHost.pl