Avatar billede dr.tynell Nybegynder
11. august 2002 - 12:24 Der er 20 kommentarer og
2 løsninger

Kategorisering af produkter

Hej!

Jeg er ved at lave et system med brug af en mysql database - det indeholder produkter og produktkategorier.

Nu er mit problem så at jeg ikke helt kan få styr på mine hierakier i forhold til produktkategorierne.

Fx. hvordan har de lavet kategoriseringen her på eksperten.dk - med hovedkategorier og underkategorier?

Jeg har kigget lidt på denne artikel om normalisering i databaser:
http://www.phpbuilder.com/columns/barry20000731.php3?page=3
- Men hvordan laver jeg foreign keys i mine tables?
Avatar billede ascii Nybegynder
11. august 2002 - 12:31 #1
Hvorfor anvender du FK i MySQL. Det er nemmere bare at definere en kopi af primær nøgle i de tabeller du ønsker at danne en relation med
Avatar billede dr.tynell Nybegynder
11. august 2002 - 12:32 #2
jeg ønsker ikke nødvendigvis at anvende fk - bare have styr på mine kategoriseringer - som her på eksperten.dk.
Avatar billede dr.tynell Nybegynder
11. august 2002 - 12:33 #3
og iøvrigt, hvordan definerer jeg en kopi af min primære nøgle i de forskellige tabeller?
Avatar billede ascii Nybegynder
11. august 2002 - 12:35 #4
eks...
CREATE TABLE postnr
(postnr CHAR(4) NOT NULL,
byer VARCHAR(25) NOT NULL,
PRIMARY KEY (postnr));


CREATE TABLE bruger
(brugerid int not null auto_increment,
fornavn VARCHAR(20) not null, 
efternavn VARCHAR(20) not null,
adresse VARCHAR(50) not null,
tlf char(12),
email VARCHAR(30) not null,
postnr char(4) not null,
primary key (brugerid));

Jeg har nu dannet en relation mellem postnr og bruger..
Avatar billede dr.tynell Nybegynder
11. august 2002 - 12:36 #5
hmm - oki, men holder mysql så selv styr på relationen, så der ikke opstår fejl?
Avatar billede ascii Nybegynder
11. august 2002 - 12:38 #6
Ja den gør så
Avatar billede ascii Nybegynder
11. august 2002 - 12:39 #7
men inden du går igang med at kode, er det en god ide at designe DB først..
Avatar billede dr.tynell Nybegynder
11. august 2002 - 12:40 #8
ja oki... det er egentlig også det jeg er ved :o)
Avatar billede dr.tynell Nybegynder
11. august 2002 - 12:41 #9
er det så lettest hvis jeg laver en tabel der hedder hoved_kategorier, sub_kategorier og så relatere dem til min produkttabel?
Avatar billede ascii Nybegynder
11. august 2002 - 12:51 #10
Det kunnde du da godt gøre. Det er en mulighed blandt mange.
Avatar billede morw Nybegynder
11. august 2002 - 12:53 #11
Bare en tabel til kategorierne vil jeg sige.

kategorier

id int
liggeunder_id int
navn varchar
osv

Hvis det er en hovedkategori så sæt iggeunder_id til 0 eller sæt liggeunder_id til den hovedkategori som kategorien skal ligge under.

På den måde kan du have underkategorier under underkategorier o.s.v.

Lidt på samme måde som man ville lave tråde til et indlæg til et forum.
Avatar billede ascii Nybegynder
11. august 2002 - 12:54 #12
Kender du normaliseringsprocesserne?????
Avatar billede dr.tynell Nybegynder
11. august 2002 - 12:54 #13
oki, lyder lidt som om det ikke er det klogeste?

Hvorfor skal jeg benytte varchar datatypen? så kan jeg jo ikke få mysql til at auto_increment'e.
Avatar billede dr.tynell Nybegynder
11. august 2002 - 12:56 #14
ja, har læst på en artikel om normalisering i databaser. Men gik lidt i stå da jeg ikke ved hvordan jeg laver foreign keys i mysql (læs hovedspørgsmålet :o)
Avatar billede morw Nybegynder
11. august 2002 - 12:56 #15
Hmm jeg har egentlig et dump af det kategori system jeg bruger på http://www.megapixel.dk/shop/kategorier.php hvis du vil have det? Det er lavet så produkter kan optræde i flere kategorier.
Avatar billede dr.tynell Nybegynder
11. august 2002 - 12:57 #16
ja, det vil jeg da gerne :o)
Avatar billede morw Nybegynder
11. august 2002 - 13:00 #17
CREATE TABLE shop_kategori (
  id mediumint(8) unsigned NOT NULL auto_increment,
  mor_id mediumint(8) unsigned NOT NULL default '0',
  navn varchar(60) NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

CREATE TABLE shop_link (
  id mediumint(8) unsigned NOT NULL auto_increment,
  produkt_id mediumint(8) unsigned NOT NULL default '0',
  kategori_id mediumint(8) unsigned NOT NULL default '0',
  PRIMARY KEY  (id),
  KEY produkt_id (produkt_id),
  KEY kategori_id (kategori_id)
) TYPE=MyISAM;

CREATE TABLE shop_produkt (
  id mediumint(8) unsigned NOT NULL auto_increment,
  pris double(8,2) NOT NULL default '0.00',
  aktiv enum('ja','nej') NOT NULL default 'nej',
  navn varchar(60) NOT NULL default '',
  korttekst mediumtext NOT NULL,
  langtekst text NOT NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;
Avatar billede dr.tynell Nybegynder
11. august 2002 - 13:03 #18
tak... jeg kigger lige på den og vender tilbage
Avatar billede dr.tynell Nybegynder
11. august 2002 - 16:15 #19
nu har jeg fået lavet systemet så nogenlunde - nu kan jeg så bare ikke trække data ud på den måde jeg vil have dem.
Vil gerne laver udtrækket så det bliver således:
hovedkat.
- underkat.
- underkat.
hovedkat.
-underkat.
hovedkat.

...osv.
Avatar billede morw Nybegynder
11. august 2002 - 19:03 #20
Det kan gøres på 2 måder: Enten via et while loop inde i et while loop eller ved at checke hvornår hovedkategorien ændre sig.

1.

loop1 = SELECT * FROM kategori WHERE mor_id = 0

while (loop1) {

loop2 = SELECT * FROM kategori WHERE mor_id = id_fra_loop1

while (loop2) {

} // slut while

} // slut while
Avatar billede dr.tynell Nybegynder
18. august 2002 - 15:42 #21
oki... morw -> vil du svare, så du kan få point.
Avatar billede morw Nybegynder
18. august 2002 - 18:58 #22
jeps
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester