Citat:
jeremy:
ne vidim razlog zbog cega bi koristio dve tabele, jednostavnije je da u jednoj drzis sve, i razlicitim select upitima izvlacis ono sto ti treba. Evo ti par upita za kreiranje, punjenje i ispis, ako sam pogodio sta tacno zelis
CREATE TABLE knjige (
id int NOT NULL auto_increment,
knjiga varchar(50) default NULL,
oblast int NOT NULL,
UNIQUE KEY id (id)
);
INSERT INTO knjige VALUES(NULL,"Knjiga 1.1",1);
...
select * from knjige where oblast=1;
Mislim da si zbunio coveka, jer ovo tvoje resenje je sa 2 tabele (a ti kazes da treba samo jedna). Druga tabela ti je OBLASTI (ili kategorije) gde mora da pise kako se koja kategorija zove.
dakle moras imati jos jednu tabelu
create table kategorije (
cat_id int unsigned not null auto_increment,
naziv varchar(30)
primary key (cat_id)
);
Ovako kako si ti predlozio njegove kategorije (oblasti) se pojavljuju na sajtu pod nazivima 1, 2, 3.... sto je neprihvatljivo, zar ne. Zatim, ako imas auto increment, on treba biti unsigned.
Dalje, ako zelis da jedna knjiga moze pripadati u vise kategorija, treba ti i treca table, a iz prve izbacis kolonu oblast. dakle:
CREATE TABLE knjige (
id_knjige int unsigned NOT NULL auto_increment,
naziv_knjige varchar(50) default NULL,
PRIMARY KEY (id_knjige)
);
CREATE TABLE oblasti (
id_oblasti int unsigned NOT NULL auto_increment,
naziv_oblasti varchar(50) default NULL,
PRIMARY KEY (id_oblasti)
);
CREATE TABLE knjige_oblasti (
id_knjige int unsigned NOT NULL DEFAULT 0,
id_oblasti int unsigned NOT NULL DEFAULT 0,
PRIMARY KEY (id_knige, id_oblasti)
);
pa kada citas knjige iz neke oblasti 1 citas sa:
select ko.*, k.*, o.* from knige_oblasti as ko
left join knjige as k on (ko.id_knjige = k.id_knjige)
left join oblasti as o on (ko.id_oblasti = o.id_oblasti)
where ko.oblast_id = 1
i tako dobijas kompletan slog za odredjenu knjigu.
ako citas kojim sve oblastima pripada odredjena kniga 5:
select ko.*, o.* from knjige_oblasti as ko
left join oblasti as o on (ko.id_oblasti = o.id_oblasti)
where ko.id_knjige = 5
ako hoces da recimo jedna knjiga (38) pripada u oblasti 1, 7 ,49 samo u knjige_oblasti dodase sve te parove
insert into knjige_oblasti values (38, 1);
insert into knjige_oblasti values (38, 7);
insert into knjige_oblasti values (38, 49);
itd... da ne gusim dalje.
Ovo su fundamentalne (osnovne) stvari u relacionim bazama podataka i trebalo bi dobro prouciti odnose izmedju tabela pre nego sto pocnes da pises aplikaciju (DBMS). Postoje veze 1-to-many, many-to-1, i manu-to-many. Ovo sto tebi treba je many-to-many jer u jednoj oblasti moze biti vise knjiga a jedna knjiga moze pripadati vise oblasti.
Goran Pilipović fka bluesman