![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 23.10.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszytkich!
![]() 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 ![]() 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 ![]() tomaxs Ten post edytował tomaxs 26.10.2004, 09:01:50 -------------------- ----
tomaxs |
|
|
![]() |
![]()
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 ![]() pzdr Ten post edytował Leezard 26.10.2004, 09:53:44 -------------------- Nie rób nic na siłę - weź większy młotek ;)
|
|
|
![]()
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. -------------------- |
|
|
![]()
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 ;)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: -- Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 116 Pomógł: 0 Dołączył: 19.09.2004 Skąd: Uć Ostrzeżenie: (0%) ![]() ![]() |
oo widzisz lemming
![]() jednak search to tez takie przydatne narzedzie na forum ![]() -------------------- Nie rób nic na siłę - weź większy młotek ;)
|
|
|
![]()
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. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 20:38 |