Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pole z różną ilością słów
Forum PHP.pl > Forum > Bazy danych > MySQL
ultramega-ok
Jestem dosyć zielony w MySQL-u, więc mam takie pytanie:
chcę zrobić bazę przechowującą informacje o rysunkach (tytuł, data, itp. ), a jedną z nich ma być słowo określające kategorię do której należy rysunek, np. krajobraz, portret. Problem mam taki, że niektóre rysunki będą należeć do kilku kategorii jednocześnie (czyli w czasie wyszukiwania ta sama praca może zostać wyświetlona dla różnych słów) i nie wiem jak to rozwiązać: jak w jednym polu o nazwie np. "kategoria" przechowywać kilka słów, przy czym ta ilość będzie zmienna? Można zrobić pole będące np. tablicą stringów lub czymś w tym rodzaju?
SongoQ
Proponuje takie rozwiazanie:

Stworzenie tabelki kategoria w ktorej masz takie pola
Kat_Id
Kat_Nazwa

Kolejna tabele ktora bedzie laczyla obraz z kategoria
ObrazKategoria:
ObrKat_Id
ObrKat_Kat_Id - id kategori
ObrKat_Obr_Id - id obrazu
ultramega-ok
Nie rozumię tego chyba do końca. Jak teraz przypożądkować jednemu rysunkowi kilka nazw kategorii, skoro jest jedno pole "ObrKat_Kat_Id" questionmark.gif
yavaho
Jeżeli rysunki beda znajdywane podczas wyszukiwania to proponuje dodac jedno pole tekstowe w ktorym beda tylko slowa kluczowe odpowiednie dla danego obrazka. Jest to prosta metoda w ktorej nie trzeba zakladac dodatkowej tabeli z kategoriami, ale trzeba recznie wklepywac słowa kluczowe.

Albo metoda ktora podal @SongoQ z dodatkowa posrednia tabela.
I mozesz sobie przypisac do obrazka ile chcesz kategorii, a informacja o tym bedzie przechowywana wlasnie w tabeli posredniej.

Tabela kategorie
Kat_Id
Kat_Nazwa

Tabela obrazki
Obr_Id
Obr_Nazwa

Tabela posrednia
ObrKat_Id
ObrKat_Kat_Id - id kategorie
ObrKat_Obr_Id - id obrazki
ultramega-ok
Proszę o dokładniejsze wytłumaczenie.
W której tabeli co przechowuję? Weźcie pod uwagę, to że jestem początkujący.

Każecie zrobić dodatkowe tabele, ale jak je podpiąć do tej głównej?

Mam stworzyć taką tabelkę z nazwami kategorii - tak to ma wyglądać? :

"kategorie"
Kat_Id      : 01       02       03      04...
Kat_Nazwa: aaa    bbb      ccc     ddd...

"obrazki"
Obr_Id      : 001  002  003  004...
Obr_Nazwa: xxx  yyy  zzz  vvv...

I na koniec np.:
"posrednia"
ObrKat_Id        : 111   222   333...
ObrKat_Kat_Id :  02     04     01...
ObrKat_Obr_Id : 001   002   003...

W tej tabeli każdemu rekordowi z ID obrazka odpowiada tylko jedno pole z ID kategorii, więc jak tu mam zmieścić kilka kategorii dla jednego obrazka?? Rozumię, ze pewnie nie o to wam chodziło, ale ja nie rozumię o co, więc spróbujcie wytłumaczyć głupiemu biggrin.gif .


------------------------
Ja to chcę zrobić tak:

będzie główna tabela "rysunki" z polami:
r_tytuł
r_ocena
r_autor
r_kategorie (i tutaj właśnie chcę przechowywać nazwy kategorii, do których należy rysunek - zmienna ilość dla różnych rysunków, bo niektóre mogą należeć do wielu kat.)
I co z tym dalej zrobić?
yavaho
Kod
r_kategorie (i tutaj właśnie chcę przechowywać nazwy kategorii, do których należy rysunek - zmienna ilość dla różnych rysunków, bo niektóre mogą należeć do wielu kat.)
Nie mozesz przechowywac w jednej komorce wiecej niz jedna kategorie. Wiec musisz zrezygnowac z pola [r_kategorie] w tabeli[obrazki] I dla tego celu stworzyc dodatkowa tabele, w ktorej beda zapisane powiazania pomiedzy tabela[kategorie] a tabela[obrazki]. W tej dodatkowej posredniej tabeli zapiszesz tylko ID kategorii i ID Obrazka i nic wiecej. Ta tabela z reguly bedzie miala wiecej pozycji niz calkowita ilosc obrazkow, bo dla kazdego obrazka bedzie miala przypisane 1 lub wiecej rekordow.

"posrednia"
ObrKat_Id : 111 222 333 444 555 ...
ObrKat_Kat_Id : 01 02 03 01 02 ...
ObrKat_Obr_Id : 001 001 001 002 002 ...

Tu masz linka gdzie wytłumaczone jest kiedy mozna zastosowac tabele posrednia.
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.