Autor | Zpráva | ||
---|---|---|---|
PindaTonda Profil * |
#1 · Zasláno: 10. 10. 2018, 20:14:51
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 |
#2 · Zasláno: 10. 10. 2018, 20:37:46
Jakou databázi jaké verze?
|
||
DarkMeni Profil |
#3 · Zasláno: 10. 10. 2018, 20:46:47
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 |
||
Časová prodleva: 6 let
|
0