Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem ze zliczaniem produktow w kategoriach :(, php+mysql, problem z sumowaniem :)
tomaxs
post 26.10.2004, 08:27:27
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 23.10.2003

Ostrzeżenie: (0%)
-----


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

Ten post edytował tomaxs 26.10.2004, 09:01:50


--------------------
----
tomaxs
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
Leezard
post 26.10.2004, 09:52:53
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 19.09.2004
Skąd: Uć

Ostrzeżenie: (0%)
-----


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

Ten post edytował Leezard 26.10.2004, 09:53:44


--------------------
Nie rób nic na siłę - weź większy młotek ;)
Go to the top of the page
+Quote Post
SongoQ
post 26.10.2004, 10:59:47
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Leezard
post 26.10.2004, 16:53:21
Post #4





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 19.09.2004
Skąd: Uć

Ostrzeżenie: (0%)
-----


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


--------------------
Nie rób nic na siłę - weź większy młotek ;)
Go to the top of the page
+Quote Post
lemming
post 26.10.2004, 18:15:56
Post #5





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: --
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


http://forum.php.pl/index.php?showtopic=19536&hl=
?
Go to the top of the page
+Quote Post
Leezard
post 26.10.2004, 19:10:37
Post #6





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 19.09.2004
Skąd: Uć

Ostrzeżenie: (0%)
-----


oo widzisz lemming smile.gif

jednak search to tez takie przydatne narzedzie na forum winksmiley.jpg


--------------------
Nie rób nic na siłę - weź większy młotek ;)
Go to the top of the page
+Quote Post
SongoQ
post 27.10.2004, 00:22:10
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 20:38