Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dynamiczne dane w tabeli
Forum PHP.pl > Forum > Bazy danych
Zajec
Dręczy mnie sposób przechowywania danych, które nie zawsze da się dostosować do jednego schematu i przygotować dla nich odpowiednie pola w bazie danych. Przykładowo: lista płyt DVD z filmami w sklepie.

Oczywiste jest, że każdy film ma tytuł, reżysera i rok produkcji. Takie pola w tabeli przygotuję.

Ale co z listą postaci w filmie i aktorów postacie te odgrywających? W php mam to np. w array:
Kod
Array
(
   [Eliza] => Kowalska
   [Tomek] => Nowak
)


I czy jest jakiś przyjemniejszy sposób na przechowywanie tego niż funkcja serialize w php? Chciałbym przechowywac to w formie, która pozwalałaby mi na korzystanie z tych danych np. przy SELECTowaniu. Po użyciu serialize ciężko będzie wyciągnąć filmy, w których grał "Kowalski".

P.S.
Korzystam z baz MySQL, ale temat chyba ogólny więc umieszczam tutaj.
batman
Możesz stworzyć tabelę o takiej strukturze:

id | sname | svalue

gdzie:
id - klucz podstawowy
sname - nazwa określająca jakiś parametr, w tym przypadku postać filmu
svalue - imię i nazwisko aktora

Następnie tworzysz relację wiele do wielu między tą tabelą, a tabelą z listą płyt DVD. Innymi słowy tworzysz tabelę o takiej strukturze:

id_plyty | id

gdzie:
id_plyty - id jakiegoś filmu z Twojej tabeli
id - klucz podstawowy z nowej tabeli

A teraz wyciągnięcie filmów z Kowalskim:

  1. SELECT * FROM twoja_tabela WHERE id_plyty IN (SELECT id_plyty FROM relacja WHERE id IN (SELECT id FROM nowa_tabela WHERE svalue = 'Kowalski') );


Oczywiście nie jest to najlepszy przykład, ale mam nadzieję, że wiesz już o co chodzi.
ikioloak
Powinienes stworzyc dodatkowe 3 tabele. Np.
1. ludzie_kina (id, imie_nazwisko, typ_id)
2. typy (id, nazwa) czyli np. aktor, rezyser itp.

Te 2 tabele sa polaczone relacja jeden do wielu (jak sie mozna domyslic).
W tabeli filmy wyrzucasz wszelkie kolumny dotyczace aktorow i rezyserow itp. i tworzysz kolejna tabele:
3. filmy_ludzie_kina (id, id_filmu, id_ludzie_kina,postac)
Czyli tabele ludzie kina i filmy polaczone sa relacja wiele do wielu.

Edit: Rezyserzy mieli by w tabeli filmy_ludzie_kina wartosc NULL.
Zajec
Już zrozumiałem, dziękuję :-)
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.