Autor Zpráva
PindaTonda
Profil *
Zdravím,

potřeboval bych poradit se sestavením příkazu. Mám stromové kategorie (desítky) a v nich zařazené produkty.
Každý produkt může mít 10 kategorií a každá kategorie sub-sub-sub kategorie.

Tabulky mám takto

kategorie
shop_category - id (auto increment), parent_id, name,..

produkty
shop_products - id (auto increment), parent_id, name,....
(parent_id = varianta daného produktu, pokud je jedna varianta skladem, musí se započítat, proopjeno s _stock.product_parent_id)

párování kategorií
shop_products_category - id (auto_increment), product_id, category_id

sklad
shop_products_stock - id, product_id, stock_id, amount, product_parent_id
(product_parent_id=pokud je produkt varianta, zde si ukladam ještě jeho parenta)

Snažím se spustit např. příkaz níže, ale stále mi to vrátí jen počet kusů v dané kategorii, nevím už, jak do toho zapojit děti kategorie..
Napadlo mě vyřešit to WHERE category.id IN ( array child data kategorií ) ale to bude trvat + příkaz navíc na zjištění všech id kategorií v dané kategorii
Navíc tam potřebuji zapojit sklad, potřebuji počítat pouze produkty, které jsou skladem...

            SELECT COUNT(*) FROM (
                SELECT pr.id FROM shop_products pr 
                        LEFT JOIN shop_products_category cat ON pr.id = cat.product_id
                        LEFT JOIN shop_products_stock stock ON pr.id = stock.product_id OR pr.id = stock.product_parent_id
                                WHERE pr.parent_id='0'  cat.category_id='123' AND stock.amount>0
                                    GROUP BY pr.id
            ) d1
Kajman
Profil
Jakou databázi jaké verze?
DarkMeni
Profil
Koukni na tenhle článek: Managing Hierarchical Data in MySQL
PindaTonda
Profil *
mysql myslím 5.7 :)


Na to jsem koukal, ale je to trochu náročnější s tou hierarchií dat, tak jsem to moc nepobral
Kajman
Profil
Když si nepřidáte pomocné sloupce do tabulky kategorie pro traverzování kolem stromu, tak to na tak staré verzi obecně nepůjde bez předešlého získání všech podkategorií. S mariadb 10.2.2+ (kompatibilní klient s mysql) by to mělo jít jedním dotazem i nad současnou strukturou.

Podobný příklad s těmi pomocnými sloupci lft a rgt:
počty článků v podkategoriích

A potřebujete počet jen v jedné kategorii nebo přehled všech kategorií s počtem?
PindaTonda
Profil *
potřebuji mít právě oboje,

1) mám běžné menu, a po rozklikání je vždy v závorce kolik je v něm nabídek
2) tento počet zjišťuji i zvlášť pro samostatnou kategorii

zároveň nechci zobrazovat kategorie které mají celkem 0 nabídek


Jinak je to verze

innodb_version
5.6.36-82.1

protocol_version
10

slave_type_conversions version
10.1.26-MariaDB-0+deb9u1

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0