Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Lista wszystkich podkategori
Forum PHP.pl > Forum > PHP
Teamon
Skrypt dostaje (int)categoryId. Ma za zadanie wyswietlic wszystkie produkty w tej kategori oraz jej wszystkich podkategoriach.

Metoda obiektu Category

Kod

public function getSubIds()
  {
    $sIDs = array();
    if(($sub = $this->getSubcategories()) != null)
    {
      foreach($sub as $s)
      {
        $sIDs = array_merge($sIDs, $s->getSubIds());
      }
    }
    else
    {
      $sIDs[] = $this->getId();
    }
    return $sIDs;
  }


gdzie getSubcategories() robie zapytanie sql po parent_id.

Potem nastepuje tylko zamiana listy ID na "WHERE category_id=X OR category_id=Y OR ..."

Pytanie czy da sie to jakos uproscic/zrobic szybciej.
Ilość kategori tak jak na allegro.


Osobną sprawa jest liczenie ilosci produktow w danej kategorii (i wszystkich jej podkategoriach). Czy liczyc to tak normalnie za kazdym razem czy moze dodac kolumne product_num do tabeli categories i modyfikowac ja przy zmianach produktow?
domis86
Cytat(Teamon @ 26.12.2007, 22:46:24 ) *
...
Potem nastepuje tylko zamiana listy ID na "WHERE category_id=X OR category_id=Y OR ..."

Pytanie czy da sie to jakos uproscic/zrobic szybciej.

zamiast tego mozesz zrobic tak:

  1. WHERE category_id IN (X,Y,Z.....)


lub w ogole nie pobierac ideków podkategorii i zrobic joina
Nie wiem jaka masz strukture bazy to ci go teraz nie napisze.
Teamon
category: id, name, parent_id
product: id, name .... , category_id

Hm... czyli przy pobieraniu podkategori pobierac od razu produkty tak?
domis86
  1. dane: x - id kategorii
  2.  
  3. SELECT p.id,p.name FROM products AS p INNER JOIN category AS c ON p.category_id = c.id WHERE c.id = 'x' OR c.parent_id = 'x'

czarodziej.gif

Mozesz tez pobrac przy tym od razu kategorie, ale chyba lepiej osobno. Chociaz zalezy smile.gif
Teamon
Hm.. tak sie zastanawiam, bo produkty moga byc jedynie w kategori najnizszego poziomu.

A jakis pomysly co do liczenia ilosci produktow w danej kategori?
domis86
Cytat(Teamon @ 27.12.2007, 13:54:45 ) *
A jakis pomysly co do liczenia ilosci produktow w danej kategori?


  1. SELECT COUNT(p.id) AS sume FROM products AS p WHERE p.category_id = 'x' OR p.category_id WHERE c.id = 'x' OR c.parent_id


albo jak bez subkategorii to:

  1. SELECT COUNT(p.id) AS sume FROM products AS p WHERE p.category_id = 'x'
Teamon
Ale z subkategoriami i subkategoriami subkategorii i ich subkategoriami.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.