[Pętle] Automatyczne sumowanie

Odpowiedz Nowy wątek
2006-12-23 15:29
0

W tabeli cats istotne są pola:

ID || SC (ID wyższej kategorii) || NUM (liczba pozycji w danej kategorii i jej podkategoriach)

Zawartość (arty, newsy, itp.) znajdują się w tabelach arts, news, itd.

Dla przykładu istnieje drzewo kategorii:

Kat. główna 1
|-- Subk. 2
|-- Subk. 3
|-----Subk. kolejnego poziomu 4

Subkategorii może być (nieskończenie) wiele.

Na przykład dodaję lub usuwam artykuł w kategorii 4. Ilość zawartości powinna zostać zaaktualizowana (najlepiej poprzez dodanie lub odjęcie 1 do pola NUM kategorii 4 oraz wyższych). Jak to zrobić?

Czy w języku SQL można stosować pętle?

Jeśli nie da się tego zrobić na poziomie zapytania SQL, rozwiążę problem inaczej.

Ewentualnie możliwe jest pobranie danych o istotnych kategoriach za 1 razem, stosując inne polecenia SQL?

Pozostało 580 znaków

2006-12-24 11:43
0

Jaki sql?

Mozna to zrobic jednym zapytaniem, np. mssql:

update cats set num = num + 1 where sc >= 4

i tak, mozna stosowac petle zazwyczaj, ale nie jestem pewien czy we wszystkich serwerach (mssql na pewno, mysql chyba tez).


You need to learn how to walk
before you can run

Pozostało 580 znaków

2006-12-24 18:22
0

SC przechowuje ID wyższej kategorii. Powyższe zapytanie zwiększy liczbę ilości zawartości o 1 kategoriom, których ID nadrzędnej kategorii jest większe lub równe X. Skąd to wiadomo?

Przykład skomplikowanej tabeli z istotnymi polami:

| ID || SC || NUM |
| 1. || P. || -5- |
| 2. || P. || -10 |
| 3. || 2. || -2- |
| 4. || 2. || -5- |
| 5. || 4. || -20 |

P = kategoria główna
Dla przykładu dodaję artykuł do kategorii o ID 5. Pole NUM zwiększa się o 1. Ponieważ nadrzędną kategorią jest 4, również tam trzeba dodać 1 do NUM. Kolejną nadkategorią jest 2, więc też pole NUM powinno się zwiększyć o 1. To tylko przykład! Wartości ID mogą być różne!

Mam nadzieję, że rozumiecie, o co tu chodzi. Skrypt jest nastawiony głównie na obsługę MySQL.

Pozostało 580 znaków

2006-12-25 22:10
0

Zakladajac, ze zamiast 'P' jest null, to wypocilem cos takiego - teoretycznie powinno dzialac, praktycznie cos jeszcze jest nie tak. Ale chwilowo nie mam wiecej czasu:

mysql> delimiter //
mysql> create procedure updateNum(id int)
    -> begin
    -> declare nextID int;
    -> set nextID = id;
    -> select nextID;
    -> while nextID is not null do
    -> update tabela set num = num + 1 where id = nextID;
    -> select sc from tabela where id = nextID limit 1 into nextID;
    -> select nextID;
    -> end while;
    -> end
    -> //

Moze sie na cos przyda


You need to learn how to walk
before you can run

Pozostało 580 znaków

2007-01-15 17:04
0

A nie pomyślałeś, że by zamiast zwiększac pul i trzymać tychsamych danych w nieskończenie wielu miejscach po prostu w razie potrzeby zliczyć te artykuły ;]
...wiesz to się nazywa normalizacja i doprowadza do tego, że schematy relacji są prostrze i bardziej przejrzyste ;]


<font color="darkblue"><font size="5">セボ</span>
Java PHP SQL
MatLab C# C++ Prolog SIOD</span>
<font size="1">Dziwne jest to, że na większość zadanych tu pytań sam sobię odpowiadam :]</span>

Pozostało 580 znaków

2007-01-16 01:06
0

Czasem sie nie oplaca, jesli sumowanie trwa za dlugo. Ale fakt - dla paru danych bedzie ladniej :)


You need to learn how to walk
before you can run

Pozostało 580 znaków

2007-01-16 03:07
0
johny_bravo napisał(a)

Czasem sie nie oplaca, jesli sumowanie trwa za dlugo.

Ale On chyba mówi o bazie danych a nie hurtowni [???] ;]


<font color="darkblue"><font size="5">セボ</span>
Java PHP SQL
MatLab C# C++ Prolog SIOD</span>
<font size="1">Dziwne jest to, że na większość zadanych tu pytań sam sobię odpowiadam :]</span>

Pozostało 580 znaków

2007-01-16 08:10
0

Pewnie tak, ale w sumie to nie wiadomo do konca :)


You need to learn how to walk
before you can run

Pozostało 580 znaków

2007-01-17 06:46
0

po to ktoś wymyślił całe te bazy, żeby nie trzymać wszystkiego w 10 różnych miejscach tylko używać czegoś takiego jak SUM, MAX, MIN itp.
BTW jak już tak bardzo chcesz to mieć zapisane to poczytaj o czymś takim jak wyzwalacze a jak Twoja baza tego nie ma to znaczy, że nie można o niej mówi w kategorji baz danych (to do pytacza)


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0