Avatar billede mac10 Nybegynder
13. januar 2011 - 13:30 Der er 5 kommentarer

Dyb kategori med flere niveauer? Hvordan ville du lave det?

Hej eksperter,

Jeg er ved at opsætte min DB og er lidt i tvivl om hvordan jeg skal udarbejde dette.

Mine kategorier går forholdsvis dybt og derfor jeg er stået lidt af. Det jeg vil fremtil er følgende i én tabel:

- Mærke
- Model
- Kategori
- Underkategori


De jeg har valgt at gøre er at lave én tabel som indeholder det hele. Så for at linke dem sammen så sætter jeg dem sammen med en række: "parent_id". Hertil kan jeg så få allesammen til at sidde sammen på følgende måde:

id: 1
title: Opel
parent_id: 0

id: 2
title: kadett
parent_id: 1

id: 3
title: reservedele
parent_id: 2

id: 4
title: bremser
parent_id: 3


Jeg ved godt at hvis man skulle lave markedsplads for biler kunne det laves bedre, men tager det bare som eksempel.

Det jeg har gjort med ovenstående eksempel er at sætte dem sammen, så man vælger det sådan her
Opel -> Kadett -> Reservedele -> Bremser

Men mit problem ligger jo bare i at hvis jeg nu er på ID 3 så kan jeg ikke fortælle om jeg er under et mærke, model, kategori eller underkategori.

Er der nogen der har nogle gode idéer og strategier til hvordan man opsætter databasen så den bedst muligt arbejder sammen med dybe kategorier? Og nogle der har erfaringer med diverse metoder så vil jeg rigtig gerne høre fra jer.

Jeg har kodet ovenstående til PHP, synes bare det virker uoverskueligt i forhold til hvordan det kunne laves.

Jeg har før lavet det så jeg adskilte mærker, modeller og kategorier hver for sig i hver sin tabel, men synes bare det var mange MySQL kald der skulle laves hver gang, og det virkede, men skulle mene det kunne laves smartere?

Alle inputs er værdsat, tak.
Avatar billede evilfish Nybegynder
13. januar 2011 - 14:16 #1
Din konstruktions ide er som den skal være, da det gør din kategori table mulig at udvide som du vil.

Personligt vil jeg huske at linke 'id' og 'parent_id' sammen med en foreign key, da det vil vedligeholde integriteten på al din data, så du ikke kan komme til at ødelægge den kategori struktur.


Når det kommer til at query din kategori for enten alle over- og/eller under-kategorier, så er der nok en vej og det er at lave en Stored procedure som kan itere sig igennem tingene.

Nogle af de nye versioner af mysql kan klare opgaven via UNION, dog kan ikke huske syntaxen for den.
Avatar billede chrishunter Nybegynder
13. januar 2011 - 14:56 #2
Jeg har svært ved at se, at du kan gøre andet end at mærke de enkelte poster med, hvilken kategori de måtte være af.
Personligt ville jeg lave yderligere en tabel, hvor kategorierenes navne er gemt og sandsynligvis ville jeg også ordne denne med et parent_id felt. (Der skal så være et catagory_id felt, der linker til denne, i den oprindelige tabel.)

I øvrigt:
Al mulig anerkendelse for at du fra starten har tænkt dig om og ikke lavet nogen begrænsning i antal niveauer.


Held og lykke,

Christian
Avatar billede chrishunter Nybegynder
13. januar 2011 - 15:06 #3
P.S.: Det ser ud til, at der er en, der arbejder med noget tilsvarende her: http://www.eksperten.dk/spm/928730
Avatar billede neoman Novice
15. januar 2011 - 17:29 #4
Prøv at kigge på hierakiske data, se f.eks.her: http://www.eksperten.dk/spm/923391
Avatar billede neoman Novice
15. januar 2011 - 17:29 #5
hieraRkiske !
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