Versio

Meerdere categorieën

Overzicht Reageren

Roel van de Water
Moderator

Roel van de Water

20/09/2011 17:59:58
Quote Anchor link
Hoi,

Ik ben momenteel bezig met een CMS en hierin kunnen artikelen worden aangemaakt die vervolgens in een bepaalde categorie geplaatst worden. Nu heb ik het zo gemaakt dat een artikel maar in één categorie kan, maar het lijkt me eigenlijk mooier om te maken dat een artikel in meerdere categorieën komt te staan.

Het hele systeem met PHP en HTML gaat me wel lukken, maar ik loop vast op het gedeelte waarin er categorieën geselecteerd moeten worden.

Ik heb dan de volgende tabellen met daarin de volgende waardes:

artikelen
---------
naam
cats

categorien
----------
id
naam

In het veld 'cats' van artikelen staat dan bijvoorbeeld 1,2,3 en die cijfers zouden moeten matchen op het ID van categorieën. Dat ik dus bijvoorbeeld als output terugkrijg Nieuws, Kleuren, Voorbeeld.

Lastig verhaal, maar ik hoop dat het een beetje duidelijk is.

Alvast bedankt.
 
PHP hulp

PHP hulp

25/05/2012 08:56:46
Gesponsorde koppelingen:
 
Jacco Brandt

Jacco Brandt

20/09/2011 18:36:48
Quote Anchor link
SELECT naam FROM artikelen WHERE cats=ID
 
Roel van de Water
Moderator

Roel van de Water

20/09/2011 18:46:46
Quote Anchor link
Dat snap ik. Maar ik wil meerdere categorieën per artikel, zoals in Wordpress bijvoorbeeld.
 
Jacco Brandt

Jacco Brandt

20/09/2011 18:48:50
Quote Anchor link
Dan zul je de tabel om moeten draaien

artikelen
------------
id
naam

categorien
------------
id
naam
art_id


Oh, en ik raad je aan om al je code/tabellen in het engels te doen.
Gewijzigd op 20/09/2011 18:49:34 door Jacco Brandt
 
Roel van de Water
Moderator

Roel van de Water

20/09/2011 20:50:29
Quote Anchor link
Ik denk niet dat Wordpress het zo opgelost heeft.
Er moet toch een snippet of functie voor zijn in MySQL of PHP voor zoiets?
 
Jacco Brandt

Jacco Brandt

20/09/2011 22:10:22
Quote Anchor link
Wat is er dan mis met die methode?
 
Roel van de Water
Moderator

Roel van de Water

20/09/2011 22:42:37
Quote Anchor link
Kijk, ik wil dat bijvoorbeeld 1,2,3 verandert naar de namen van de categorie, waarvan die getallen verwijzen naar het ID van die categorie.
 
Ger van Steenderen

Ger van Steenderen

20/09/2011 23:28:15
Quote Anchor link
De mogelijke cats in een varchar en dan met like
je cats veld heeft als waarde 'cat1, cat2, cat3'
je sql zou dan zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM products WHERE cats LIKE '%cat1%'

Je kan ook nog het veld cats ENUM of sET type geven maar dat heeft wat meer beperkingen.
 
Bartje Jansen

Bartje Jansen

21/09/2011 10:34:58
Quote Anchor link
Jacco Brandt op 20/09/2011 18:48:50:
Dan zul je de tabel om moeten draaien

artikelen
------------
id
naam

categorien
------------
id
naam
art_id


Oh, en ik raad je aan om al je code/tabellen in het engels te doen.

Dat is fout en wel hierom:
Eén artikel kan meerdere categorieën bevatten.
Eén categorie kan bij meerdere artikelen horen.

Dit is dus typisch een meer-op-meer relatie en dat kun je onmogelijk construeren met slechts 2 tabellen wat altijd een één-op-meer relatie is. Ga maar normaliseren, dan zie je het zelf ook.

artikelen:
- id_artikel (primary key)
- content

categorieen:
- id_categorie (primary key)
- categorie

artikel_categorie:
- id_artikel (foreign key naar artikelen)
- id_categorie (foreign key naar categorieen)
- primary key op de combinatie van id_artikel en id_categorie

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
  artikelen.artikel,
  categorieen.categorie
FROM
  artikel_categorie
    JOIN artikelen USING(id_artikel)
    JOIN categorieen USING(id_categorie)
 
Ger van Steenderen

Ger van Steenderen

21/09/2011 11:45:13
Quote Anchor link
@Bartje:
Wat jij doet is ook een optie maar heeft als nadeel dat je een extra tabel creëert.
Waarin één artikel dus meerdere malen voorkomt, hetgeen op zich niet zo erg als je een beperkte catalogus hebt. Ik zou dan nog eerder de categoriën groeperen en daar op selecteren.
 
Jacco Brandt

Jacco Brandt

21/09/2011 14:32:14
Quote Anchor link
Bartje Jansen op 21/09/2011 10:34:58:
Dat is fout en wel hierom:
Eén artikel kan meerdere categorieën bevatten.
Eén categorie kan bij meerdere artikelen horen.


Dan had ik het verkeerd begrepen. Ik dacht dat hij 1 artikel op meerdere categorien was.
 
Bartje Jansen

Bartje Jansen

21/09/2011 15:19:24
Quote Anchor link
Ger van Steenderen op 21/09/2011 11:45:13:
@Bartje:
Wat jij doet is ook een optie maar heeft als nadeel dat je een extra tabel creëert.
Waarin één artikel dus meerdere malen voorkomt, hetgeen op zich niet zo erg als je een beperkte catalogus hebt. Ik zou dan nog eerder de categoriën groeperen en daar op selecteren.

Een extra tabelletje noem je een nadeel? Alsof je een extra druppel water in zee doet, maakt echt geen significant verschil. Dit kun je vervolgens wegstoppen achter een VIEW en jouw queries in de scripts blijven ook lekker eenvoudig.

Wanneer je gaat normaliseren, zul je altijd op dit model uitkomen. En dat werkt al zo sinds de jaren '70 en bewijst dagelijks dat het werkt. Wanneer jij een beter model hebt dan Codd, leg het dan eens uit en laat het eens zien.

Toevoeging op 21/09/2011 15:20:20:

Jacco Brandt op 21/09/2011 14:32:14:
Bartje Jansen op 21/09/2011 10:34:58:
Dat is fout en wel hierom:
Eén artikel kan meerdere categorieën bevatten.
Eén categorie kan bij meerdere artikelen horen.


Dan had ik het verkeerd begrepen. Ik dacht dat hij 1 artikel op meerdere categorien was.

Klopt, maar hoe groot is de kans dat er slechts 1 artikel wordt aangemaakt? Of dat ieder artikel zijn eigen unieke categorieën heeft?
Gewijzigd op 21/09/2011 15:22:16 door Bartje Jansen
 



Overzicht Reageren

Get Adobe Flash player