Avatar billede mac10 Nybegynder
09. oktober 2009 - 17:38 Der er 5 kommentarer og
1 løsning

Produkt i kategori, hvad med underkategori?

Hej,

Jeg har sorteret mine produkter i kategorier. Jeg har desuden underkategori til disse kategorier. I kategori tabellen er der et felt som hedder "parent_id", hvis dette er 0 er det en hovedkategori, er det et ID er det underkategori til det ID som står i den.

Jeg skal hente mine produkter, som jeg gør sådan her:

$cat_id = $_GET['cat_id'];
SELECT *
FROM products
WHERE products.category_id = '$cat_id'
ORDER BY date_added DESC

Lad os sige jeg har følgende:

Hovedkategori: Scripts (ID 1)
Underkategori 1: ASP (ID 2)
Underkategori 2: PHP (ID 3)
Underkategori 3: Javascript (ID 4)

Og hvis et produkt ligger i PHP, så skal det også vises hvis jeg klikker på Scripts, da PHP er en underkategori til Scripts.

Håber jeg forklare godt nok ellers må i meget gerne spørge, da jeg virkelig har brug for hjælp til dette.

På forhånd mange tak.
Avatar billede Gudiik Nybegynder
09. oktober 2009 - 21:23 #1
Det burde da virke det du har lavet der.
Avatar billede mac10 Nybegynder
09. oktober 2009 - 22:32 #2
Det virker netop ikke, da produktet kun tager udgangspunkt i den kategori som er tilknyttet det enkelte produkt.

Er et produkt f.eks. tilknyttet ID 3, som i ovenstående eksempel er PHP, hvordan skal ovenstående kode så vide at den kategori er tilknyttet Scripts som er hovedkategori for PHP?
Avatar billede Gudiik Nybegynder
09. oktober 2009 - 22:47 #3
Vil du have det lavet sådan her:

-Scripts
--PHP
---Undermenu til PHP
-Java
---Undermenu til Java

Osv osv?
Avatar billede hermandsen Juniormester
10. oktober 2009 - 09:29 #4
Noget i denne stil?

$cat_id = $_GET['cat_id'];

$sql = <<<End
SELECT
  parent.*
FROM
  products AS p JOIN
  products AS parent ON
  p.parent_category_id = parent.id
WHERE
  p.category_id = '$cat_id'
End;

Husk at escape $cat_id!!

Når du har med en træ-struktur at gøre i en database bør du desuden overveje at bruge MPTT (Modified Pre-order Tree Transversal), som er langt mere effektiv, men lidt besværlig at vedligeholde.

MySQL har selv en ok forklaring på problemstillingen:
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

God weekend!

// hermandsen
Avatar billede mac10 Nybegynder
10. oktober 2009 - 15:11 #5
Hej hermandsen,

Er ikke helt med på ovenstående. Min tabel hvor kategorierne ligger hedder products_categories. Hvordan kan den hente parent_id ud uden at hente fra den?

Jeg har:

products
- id
- title
- category_id

products_categories
- id
- title
- parent_id

Men med ovenstående henter den jo ikke parent_id ud fra products_categories?
Avatar billede hermandsen Juniormester
10. oktober 2009 - 16:41 #6
SELECT
  p.*
FROM
  product_categories AS c JOIN
  products AS p ON
  p.category_id = c.id OR
  p.category_id = c.parent_id
WHERE
  c.id = '$cat_id';

(ikke testet)

Du får dog et problem når du dit træ bliver dybere, da du så skal bygge rimelig mange joins op, eller kalde SQL rekursivt.
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

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