MySQL struktura, nekaj vprašanj
4 naročniki
4 naročniki
Pri učenju osnov MySQL in PHP sem naletel na nekaj težav, za katere ne najdem odgovora s pomočjo googla.
In sicer imam tri tabele, ki so vezane druga na drugo. Produkti, proizvajalci, serije. In sicer potem lahko na strani prikažem posamezen produkt z vsemi podatki proizvajalec->serija->produkt. Kot primer: ford->focus->1.6 16V
Ker nameravam nekoč postaviti na strani tudi iskalnik v obliki filtra me zanima kaj narediti pri tistih poljih, kjer je opcij za vnos več. Torej, če ostanemo pri prejšnjem primeru, kaj narediti pri recimo polju barva, ko je lahko možnosti več.
Pri produktih, ki jih nameravam vnesti v bazo je namreč tako, da jih z eno majhno spremembo izdelujejo tudi do osem različnih. Na primeru z avtomobili bi to bilo tako kot, da bi recimo lahko avto naročil v štirih barvah in z recimo šestimi različnimi volanskimi obroči.
Sedaj me zanima ali moram za vsako tako možnost narediti nov vnos v tabelo produktov ali obstaja kakšna možnost, da v tista polja, ki omogočajo več vnosov vpišem več podatkov. Seveda je pri tem bistveno, da obstaja kasnejša možnost filtriranja produktov ravno po vsakem od teh kriterijev posamično.
Torej obstaja kaka možnost, da zapišem v field v bazi recimo: črna, bela, rdeča in je potem v iskalniku mogoče, da ne glede na to katero od teh treh barv izberemo, da nam vedno izpiše med rezultati tudi ta produkt?
12 odgovorov
Hvala za nasvet, sem že naštudiral malo ta problem. Ko bom pa rabil naslednji nasvet pa bom spet napisal kaj na tem forumu.
Tako kot sem napisal v prejšnjem postu, se sedaj ponovno oglašam z novim problemom.
V MySQL bazi imam tri tabele:
Podjetja:
*podjetjeID
*podjetjeime
*podjetjelogourl
*podjetjepredstavitev
Serije:
*serijaID
*podjetjeID
*displaynumber
*serijaime
Produkti:
*produktID
*podjetjeID
*serijaID
*display_number
*višina
*širina
*teža
*....
Sedaj pa bi rad na strani prikazal podatke za posameznega proizvajalca v obliki kot jo bom prikazal spodaj.
Ime Podjetja
Logo podjetja
Predstavitev
Ime serije 1
Prvi produkt serije 1
Drugi produkt serije 1
Tretji produkt serije 1
Četrti produkt serije 1
Ime serije 2
Prvi produkt serije 2
Drugi produkt serije 2
Tretji produkt serije 2
Četrti produkt serije 2
.........
Torej, če za prikaz podatkov podjetja zadostuje:
SELECT podjetjeime, podjetjelogourl, podjetjepredstavitev
FROM podjetja WHERE podjetjeID = %s
Se mi pri prikazu serij malo zaplete.
Sicer sem napisal recordsete tako, da dobim prikazano vse kot želim, vendar se mi zdijo preveč okorni in kompleksni. Zato me zanima ali obstaja kakšna druga možnost za to kar jaz iščem, predvsem bolj enostavna.
Za prikaz imena prve serije:
SELECT *
FROM serije
WHERE podjetjeID = colname AND display_number = 1
Za prikaz imena druge serije:
SELECT *
FROM serije
WHERE podjetjeID = colname AND display_number = 2
In tako naprej. Displaynumber sem dodelil vsem serijam ne glede na to od katerega podjetja so. Tako imajo prve serije pri vseh podjetjih številko 1, druge pri vseh številko 2 in tako naprej. Na strani sem naredil 10 recordset-ov za seriji in jim vsem postavil pogoj Show if not empty. To zaradi tega, ker en proizvajalec ima 10 serij produktov, kak drug pa recimo samo dve seriji. Vsi produkti iz prve serije pri kateremkoli podjetju imajo displaynumber 1, iz druge serije 2 in tako naprej.
Pri prikazu specifikacij produktov pa sem naredil takole:
SELECT *
FROM produkti
WHERE podjetjeID = colname AND display_number = 1
Produkte pod imenom prve serije sem nato seveda zavil v repeat region.
Nato sem enako naredil s produkti pod imeni vseh ostalih serij do številke 10.
Za opombo moram dopisati, da stran izdelujem v programu Dreamweaver.
Upam, da sem vsaj približno razumljivo napisal kako sem se lotil reševanja tega problema. Verjemam, da zagotovo obstaja kakšna bolj enostavna rešitev in prosim za kakšen nasvet.