Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem ze zliczaniem produktow w kategoriach :(
Forum PHP.pl > Forum > PHP
tomaxs
Witam wszytkich! smile.gif

Od jakiegos czasu mecze sie z systemem zliczania produktow w podkategoriach sklepu internetowego, sprawa wydaje sie z pozoru banalna, ot jedno COUNT ... i po sprawie, jednak system nie dziala tak jak powinien.

Mam 2 tabele

Kategorie
CAT_ID | ID_PARENT | CAT_NAME ...

Produkty
PR_ID | CATEGORY | PROD_NAME ...

i tak na przyklad mamy takie drzewko:

- KATEGORIA GLOWNA
--- PODKATEGORIA 1
---- PODKATEGORIA 2
---- PODKATEGORIA 3
----- PODKATEGORIA 4

Problem pojawia sie gdy chcemy zliczac produkty w gore, czyli kazda starsza kategoria zawiera sume produktow swoich "dzieci".

Wchodzac do kolejnych kategori w sklepie, w nawiasie dobrze by bylo jak by byla podana nie suma produktow tylko w tej kategori ale rowniez we wszystkich pod nia podleglych ...

Namieszalem troszke, ale mam nadzieje ze kazdy zrozumie o co mi chodzi smile.gif
Probowalem napisac funkcje oparta na rekurencji, co zreszta sie udalo, ale ona maluje drzewko takie jak widac wyzej, i niestety suma jest przekazywana w dol a nie w gore :/

z gory dziekuje za pomoc smile.gif
tomaxs
Leezard
ciekawe czy zrozumialem sprawe ale pisze:
moze niezbyt elegancki sposob, ale powinien dzialac...

napisz sobie funkcje ktora wybiera ci wszytkie podkategorie danej kategorii wg id, potem ten zestaw id'ow przerob na lancych w postaci: 1,4,3,65,32,567 (gdzie kolejne numery sa oklejnymi id podkategorii) i zapodaj go do:
select count(*) from produkty where id_kategorii in (twoj_przerobiony_lancuch);

powinno zadzialac, pisane na szybko w przerwie miedzy zajeciami winksmiley.jpg moze nie jest zbyt eleganckei i pewnie da sie to zrobic prosciej

pzdr
SongoQ
O ile wiem to w MySQLu nie da sie stosowac takich mechanizmow jak programy w bazie danych typu funkcje itd.

Wiec tego problemu nie rozwiazesz tak latwo.

Co przychodzi mi tak szybko do glowy to faktycznie rekurencyjnie jechac z zapytaniami i zwracac ile jest w podkategoriach i sumowac.
Leezard
faktycznie, MySQL nie ma takich fajnych narzedzi ;(

ale to jest pomysl, rekurencyjnie wybierac count(*) dla kazdego dziecka po kolei, i o tyle incrementowac jakas zmienna i powinno grac fsd
Leezard
oo widzisz lemming smile.gif

jednak search to tez takie przydatne narzedzie na forum winksmiley.jpg
SongoQ
No swietnie, gotowy przyklad wykorzystania zapytan rekurencyjnych.

Jednak do tego problemu trzeba podejsc troszeczke powaznie, z kilku powodow.
Gdy ilosc podkategorii jest bardzo duza, mozna krotko mowiac "zajechac baze", MySQL do takich celow sie raczej nie nadaje, warto w tym momencie poswiecic czas na PGSQL'a lub bazki komercyjne. kwestia tylko co na tym ma byc i ile wkładu finansowego przeznaczymy.

Wazne jest tez by podczas wywolan funkcji przez sama siebie nie bylo czegos takiego jak laczenie i rozlanczanie z baza danych, polaczenie powinno "wisiec", bo jesli mamy bazke w zupelnie innym miejscu niz serwer www, to wydajnosc wtedy spada, tak samo z czasem ktory jest potrzebny na nawiazanie polaczenia z baza.

Moze rzeczy na ktore sie nie zwraca za bardzo uwagi ale dla bardzo duzej ilosci zapytan wykonywanych w jednym skrypcie moze to przyspiszyc kilkukrotnie dzialanie.
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.