[php] Items uit categorie en subcategorie halen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Beekforel
  • Registratie: November 2001
  • Laatst online: 16:19

Beekforel

Is eigenlijk geen vis

Topicstarter
Ik ben bezig met een projectje waar nieuws items opgeslagen worden.
Ik heb een aantal hoofdcategorieën en een hoofdcategorie kan eventueel een subcategorie hebben.

Opbouw van category tabel is als volgt:
cat_id
cat_title
cat_childOf

Opbouw van nieuws tabel is als volgt:
nws_id
nws_category
nws_title

Nou heb ik een overzichtspagina (overview.php) die aan de hand van een meegegeven cat_id items uit een bepaalde categorie haalt.
Nou wil ik als de cat_id een subcategorie heeft die items ook laten zien, hiervoor ben ik nu bezig met een join maar ik kom er niet uit. :'(

Ik dacht dat ik met de volgende query een eind op weg was:
code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT DISTINCT
    n.nws_id, n.nws_title, n.nws_category, c.cat_childOf 
FROM
    nieuws AS n
LEFT JOIN
    category AS c
ON 
    (n.nws_category = c.cat_childOf)
WHERE 
    n.nws_category = '".$cat_id."' 
ORDER BY 
    n.nws_timestamp DESC

Het resultaat van deze query is gewoon de items uit de aangegeven categorie, niet de subcategorieën.
Ik heb het gevoel dat mijn structuur niet helemaal handig is, maar ik zou ook niet weten hoe het anders moet.
Heb inmiddels al heel wat geprutst met joins aan de hand van voorbeeldjes maar volgens mij is het toch wat te hoog gegrepen voor mij... :P

Acties:
  • 0 Henk 'm!

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 19-09 16:18
Je mist een relatie tabel die het categorieid en het nieuwsitem id als kolom heeft.
Met deze tabel kun je dan de match maken.

En meestal ziet een categorie tabel er zo uit:

id, naam, parentid

Waarbij de root dan 'null' heeft als parent.

[ Voor 32% gewijzigd door rvrbtcpt op 26-06-2007 14:18 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Begrijp ik nou goed dat je recursief de diepte in wilt? Met andere woorden, je zou zomaar een sub sub sub sub sub categorie kunnen hebben?

Acties:
  • 0 Henk 'm!

  • Beekforel
  • Registratie: November 2001
  • Laatst online: 16:19

Beekforel

Is eigenlijk geen vis

Topicstarter
Verwijderd schreef op dinsdag 26 juni 2007 @ 14:19:
Begrijp ik nou goed dat je recursief de diepte in wilt? Met andere woorden, je zou zomaar een sub sub sub sub sub categorie kunnen hebben?
Dat klopt, een categorie kan een subcategorie hebben en die subcategorie kan ook weer een subcategorie hebben.
Frijns.Net schreef op dinsdag 26 juni 2007 @ 14:16:
Je mist een relatie tabel die het categorieid en het nieuwsitem id als kolom heeft.
Met deze tabel kun je dan de match maken.

En meestal ziet een categorie tabel er zo uit:

id, naam, parentid

Waarbij de root dan 'null' heeft als parent.
Ehm? Ik begrijp niet helemaal wat je bedoelt?
Ik snap dat je een koppeltabel kunt maken maar ik weet even niet hoe ik die hier zou moeten gebruiken?

Een nieuwsitem zit bijvoorbeeld in categorie 5.
In de category tabel staat er bij categorie 5 onder cat_childOf 1, dus categorie 5 is een subcat van 1. Als ik nu overview?cat_id=1 doe wil ik het nieuwsitem uit categorie 5 ook naarboven halen.

Acties:
  • 0 Henk 'm!

Verwijderd

Beekforel schreef op dinsdag 26 juni 2007 @ 14:30:
Dat klopt, een categorie kan een subcategorie hebben en die subcategorie kan ook weer een subcategorie hebben.
Tsja dat kan wel met dit model, maar ik betwijfel of het handig is. Ik denk dat je het recursieve deel beter kunt aanpakken in php dan in sql. Er zijn wel een aantal standaard aanpakken voor (zoeken op 'tree' en 'mysql' levert waarschijnlijk genoeg resultaten) en die hebben allen hun voor en nadelen. Waar het in het kort op neer komt is dat wanneer je het op een eenvoudige manier uit je database wilt halen je van te voren meer werk zult moeten verrichten.

k denk dat je blijer wordt als je een extra veld toevoegt aan je catagorie tabel die aangeeft dat je te maken hebt me een setje/tree. In je code kun je dan daadwerkelijk de tree opbouwen door gebruik te maken van de parent en child relaties.

Acties:
  • 0 Henk 'm!

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 19-09 16:18
Nou wil ik als de cat_id een subcategorie heeft die items ook laten zien, hiervoor ben ik nu bezig met een join maar ik kom er niet uit.
Ofwel: je zoekt alle categorieen die dezelfde parent hebben.
Je maakt dan een query die alle categorieids neemt met de gewenste parent.
Met een join op de relatie tabel en de nieuwsitem tabel selecteer je dan in een keer alle artikelen die hierbij horen.

Hierdoor hoef je niet recursief (of te loopen) over je tabel met categorieids waarbij je dan weer de nieuwsitems moet gaan zoeken.

[ Voor 15% gewijzigd door rvrbtcpt op 26-06-2007 14:48 ]

Pagina: 1