Database structuur voor downloads

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Koen Vlaswinkel

Koen Vlaswinkel

19/02/2013 19:16:33
Quote Anchor link
Ik ga een download systeem maken voor één van mijn websites. Het probleem zit in het volgende:
Ik heb verschillende vakken en verschillende klassen. Nu zitten deze vakken in de klassen, maar ook andersom. Oftewel, één van de twee moet meerdere parents moeten hebben.

Als voorbeeld neem ik de vakken Nederlands en Engels. Beiden worden gegeven in klas 1 t/m 6. Nu zou ik dus kunnen hebben:
Nederlands -> Klas 1
Nederlands -> Klas 2
Nederlands -> Klas 3
Nederlands -> Klas 4
Nederlands -> Klas 5
Nederlands -> Klas 6
Engels -> Klas 1
Engels -> Klas 2
Engels -> Klas 3
Engels -> Klas 4
Engels -> Klas 5
Engels -> Klas 6
Het kan ook andersom:
Klas 1 -> Nederlands
Klas 1 -> Engels
Klas 2 -> Nederlands
Klas 2 -> Engels
Klas 3 -> Nederlands
Klas 3 -> Engels
Klas 4 -> Nederlands
Klas 4 -> Engels
Klas 5 -> Nederlands
Klas 5 -> Engels
Klas 6 -> Nederlands
Klas 6 -> Engels

In beide gevallen heb ik te maken met maar 4 verschillende categoriëen, maar ze moeten wel dubbel gemaakt worden. Nu zou ik dus eigenlijk willen hebben dat alle Klas 1 categorieën hetzelfde zijn. Hoe zou ik dit moeten oplossen in de database? In deze categorieën moeten natuurlijk ook nog weer items komen zoals 'Dicteezinnen 3V'. Ik zou het ook nog graag verder kunnen onderverdelen in VMBO, HAVO, VWO etc.

Heeft iemand suggesties?
 
PHP hulp

PHP hulp

28/02/2024 01:17:21
 
- SanThe -

- SanThe -

19/02/2013 19:22:18
 
Wouter J

Wouter J

19/02/2013 19:35:22
Quote Anchor link
Je hebt 2 methode, maar je wil er meer 1 gebruiken. Waarom sta je dan toe om er 2 te gebruiken? (of begrijp ik je verkeerd?)

En mocht je allebei willen gebruiken kun je aan de slag met een Many To Many relatie en een leuke schakel tabel.
 
Koen Vlaswinkel

Koen Vlaswinkel

19/02/2013 19:57:18
Quote Anchor link
Ik heb gekozen voor de tweede vorm:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
Klas 1 -> Nederlands
 Klas 1 -> Engels
 Klas 2 -> Nederlands
 Klas 2 -> Engels
 Klas 3 -> Nederlands
 Klas 3 -> Engels
 Klas 4 -> Nederlands
 Klas 4 -> Engels
 Klas 5 -> Nederlands
 Klas 5 -> Engels
 Klas 6 -> Nederlands
 Klas 6 -> Engels


Mijn database structuur is nu als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
download_categories:
   category_id          INT(11)        PRIMARY KEY
   category_name        VARCHAR(255)
download_parents:
   parent_id            INT(11)        FOREIGN KEY REFERENCES download_categories.category_id
   child_id             INT(11)        FOREIGN KEY REFERENCES download_categories.category_id


Ik heb nu dus eigenlijk een probleem met mijn downloads. De categorienamen zijn hetzelfde, maar de items erin niet. Dus als ik zou zeggen download_items.id = 2 (van Engels), staat het bij alle klassen. Maar ik wil het dus maar bij 1 klas hebben staan. Dus dan zou ik ook nog een koppeltabel moeten maken voor items naar juiste parent-childs matchen?

Ik gebruik nu voor het matchen van de childs aan de parent trouwens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT m.category_id AS child_id, m.category_name AS child_name, n.category_name AS parent_name, n.category_id AS parent_id
FROM
    download_categories AS m
    INNER JOIN
    download_parents AS r
        ON r.child_id=m.category_id
    INNER JOIN
    download_categories AS n
        ON r.parent_id=n.category_id
WHERE n.category_id = 1

Dit werkt in principe goed.
Resultaten hierbij (category_id = 1 is Klas 1)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
child_id     child_name     parent_name     parent_id
2               Engels          Klas 1          1
4               Nederlands      Klas 1          1
Gewijzigd op 19/02/2013 19:59:56 door Koen Vlaswinkel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.