Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Proste pytania do projektu, Konstrukcja bazy i zapytania
K_M
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.08.2008

Ostrzeżenie: (0%)
-----


racuję na dwóch grupach - tabelach : kategorie i produkty.
Kategorie to standardowe drzewko z id_kategorii, parrent_id, nazwa kategori itd.
W strukturze tabeli produkt umiescilem id_produktu, nazwa, id_kategorii, cena itd

Pytania:
1. W jaki sposób przypisać produkt do wielu kategorii? Przykład : Procesory -> Intel -> Core Duo.
EDIT: znalazłem to : http://forum.php.pl/index.php?showtopic=40992

2. Jak skonstruować zapytanie do wyszukiwania, które po wpisaniu np. "Procesor" uwzględni wszystkie produkty z kategori procesor, a nie tylko te z nazwą "Procesor". Mój pomysł jest taki, żeby do produktu dodać pole "slowa_kluczowe" i wyszukiwać też po tym polu. Tam mozna wrzucic przetlumaczone id kategori na stringi, ale to chyba mija sie z celem relacyjnej bazy danych :/ Pomocy.
EDIT: tutaj jeszcze nie nie znalazłem

3. Ostatnie, chyba najtrudniejsze... Każdy produt posiada te same pola danych jak np. tytul, cena, producent itd. Czy da sie jakos prosto dolaczyc do danej kategori, np Procesory - dodatkowe parametry dla tej grupy i jej potomków, w tym przypadku niech będzie to "FSB" i "częstotliwość"? Inna kategoria będzie posiadała inne charakterystyczne dane. Zakładam, że napiszę sobie panel do tworzenia takich dodatkowych paramertów w PHP.
EDIT: patrz edit z punktu 1 winksmiley.jpg Przykładowy kod bardzo by pomógł.
Bardzo proszę o pomoc (nawet najmniejszą) i kłaniam się nisko.
KM

Ten post edytował K_M 21.08.2008, 17:55:20
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Ad. 1) Potrzebujesz jeszcze jedną tabele: kategoriaProduktu, w której będą dwie kolumy: produkt_id, kategoria_id (reszty się domyślisz)
Ad. 2) Nie do końca rozumiem... chcesz, aby w przypadku, gdy ktoś w szukajce wpisze nazwe kategorii (np. procesory amd) to wyswietli całą kategorię? W takim razie chyba sensowne byłoby wygenerowanie sobie listy nazw kategorii i przed przystąpieniem do właściwego szukania sprawdzić czy aby przypadkiem nie szukamy całej kategorii.
Ad. 3) Tabele:
product: id, title, price itp.
customFields: id, name (np. częstotliwość), category
jakasNazwa: fieldName, fieldValue
Go to the top of the page
+Quote Post
K_M
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.08.2008

Ostrzeżenie: (0%)
-----


Czyli muszę przebudować moją bazę. Po przeczytaniu paru postów, zwłaszcza wspomnianego w głównej wiadomości zabrałem się do pracy, nie do końca rozumiejąc jak dokładnie działał będzie ten mechanizm. Wpierw prosta struktura, od czegoś trzeba zacząć.

Tabele:

Kategorie (do drzewa kategorii)
id | nazwa | parent_id | GrupyCech

GrupyCech to dla mnie chwilowa zagadka, ale taką strukturę proponowano w jednym z postów.

Produkty
id | nazwa | netto | id_miniaturki | opis i inne atrybuty

ProduktyKategorie
id_prod | id_kat

GrupyCech
id | id_cechy | nazwa

Cechy
id | nazwa | typ[tekst,link,plik,obrazek]

CechyWartosci
id | id_cechy | id_prod | wartosc

Powyższa struktura ma za zadanie uporządkować dane w formie kategori i podkategori, dodatkowo, każda kategoria może mieć jakieś cechy. Np procesory i dzieci tej kategorii będą wyświetlały cechę np. FSB, zegar itp. itd.

Proszę o wyrozumiałość, staram się czegoś tutaj nauczyć i przebrnąć przez pracę jaką mam do wykonania winksmiley.jpg

Nie do końca rozumiem co może być cechą kategorii w tabeli Cechy. Czy może to być np. wspomniana częstotliwość w nazwie FSB, ale wtedy co jest typem? Czy typ oznacza typ danych, które pole zawiera - np. może to być liczba a może to być tekst?

Autor struktury z powyżej pisze tak:
Cytat
Przy tworzeniu nowych kategorii produktów użytkownik wybierał sobie po prostu kilka grup cech które mu były aktualnie potrzebne (select multiple) i dane o grupach cech wędrowały do pola "grupy_cech" zlączone przecinkami.


Nie rozumiem co znaczą tutaj "dane o grupach cech". Sam stosowałem czasami zapis do pola typu char stringa id np. kategori rozdzielonych przecinkami. Może chodzi tutaj o id tych cech wybranych, czyli liczb, złączonych przecinkami wrzuconych w pole tekstowe?

Może na przykładzie będzie prościej.
Mamy takie kategorie :

id | nazwa | parent_id | GrupyCech
1 | Procesory | 0 | questionmark.gif
2 | AMD | 1 | questionmark.gif
3 | Intel | 1 | questionmark.gif
4 | Core Duo | 3 | questionmark.gif
5 | Celeron | 3 | questionmark.gif

Produkty

id | nazwa | netto | id_miniaturki | opis
0 | Core model X | 500.00 | 4 | "opis X"
1 | Celeron model Y | 400.00 | 7 | "opis Y"

Tabela łącząca - jak ją wypełnić?
id_prod | id_kat
questionmark.gif | questionmark.gif

Czy taka będzie jej zawartość? Może coś zupełnie mylę?
id_prod | id_kat
0 | 1
0 | 3
0 | 4
1 | 1
1 | 3
1 | 5

I ostatnia rzecz na razie - jak wyglądają zapytania do takiej struktury? Założenie jest takie, że wybierając kategorię procesory chcę zobaczyć wszystkie procesory wypisane, zarówno AMD i Intel, ale wybierając kategorię Intel - wiadomo, tylko Intel wraz z wszystkimi produktami dzieci tej kategorii.


EDIT!
Chciałbym pochwalić się, że udało mi się stworzyć system wyświetlania produktów przynależących do wielu kategorii smile.gif Struktura tabeli jest podobna jak wyżej w poście. Oto zapytania :

1. Wypisanie produktow w drzewie wszystkich kat

SELECT
SKLEP_Kategorie.id_kat AS id_kategorii,
SKLEP_ProduktyKategorie.id_kat AS id_kat_produktu,
SKLEP_ProduktyKategorie.id_prod AS id_produktu

FROM
SKLEP_ProduktyKategorie, SKLEP_Kategorie

WHERE
SKLEP_ProduktyKategorie.id_kat=SKLEP_Kategorie.id_kat

2. Wypisanie nazwy produktów o katid 1

SELECT
SKLEP_Produkty.id AS idp,
SKLEP_Produkty.nazwa

FROM
SKLEP_ProduktyKategorie, SKLEP_Kategorie, SKLEP_Produkty

WHERE
SKLEP_ProduktyKategorie.id_kat = SKLEP_Kategorie.id
AND SKLEP_Kategorie.id =1
AND SKLEP_Produkty.id = SKLEP_ProduktyKategorie.id_prod

3. Wypisanie danej kategorii razem z produktami z jej podkategorii
SELECT
SKLEP_Produkty.id AS idp,
SKLEP_Produkty.nazwa,
SKLEP_Produkty.netto,
SKLEP_Produkty.vat,
SKLEP_Produkty.czy_promocja,
SKLEP_Produkty.prom_cena,
SKLEP_Produkty.prom_sztuk,
SKLEP_Produkty.prom_data_do,
SKLEP_Produkty.id_miniaturki,
SKLEP_Produkty.ile_zdjec,
SKLEP_Produkty.data_dodania

FROM
SKLEP_ProduktyKategorie, SKLEP_Kategorie, SKLEP_Produkty

WHERE
SKLEP_ProduktyKategorie.id_kat = SKLEP_Kategorie.id
AND SKLEP_Kategorie.id =1
AND SKLEP_Produkty.id = SKLEP_ProduktyKategorie.id_prod

Jestem pewien, że można zrobić to lepiej, ale jak na pierwszy raz to działa smile.gif

Teraz drugi etap, przypisanie cech do kategorii. Jeżeli ktoś ma jakieś porady, kod, cokolwiek co może mi pomóc w następnym zadaniu to bardzo proszę o posta. Wszelkie uwagi co do powyższego kodu też mile widziane.

Pozdrawiam.

Ten post edytował K_M 22.08.2008, 22:28:51
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 08:47