Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Triggery] Jak to zrobić?
ron777
post
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 6.03.2009

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


Witam,

Załóżmy, że mamy tabelkę `ogloszenia` z kolumnami: id_ogloszenia, id_miasta, status_ogloszenia.
Mamy drugą tabelkę `ile_ogloszen` z kolumnami: id_miasta, liczba_ogloszen.

Chciałbym utworzyć taki trigger na tabeli ogloszenia, aby po każdym updacie lub insercie wykonało się zapytanie zliczające liczbę ogłoszeń w każdym mieście i aby ta informacja znalazła się w tabeli ile_ogloszen.

Sprawa wygląda prosto- tworzymy trigger, który najpierw czyści tabelę ile_ogloszen a następnie wykonuje do niej inserta z zawartością zapytania select id_miasta, count(*) from ogloszenia group by id_miasta.

Problem jest teraz gdy wykonam sobie na tabeli ogloszenia update, który zmieni mi dużą liczbę rekordów. Czyli dla każdego zmienianego rekordu będzie kolejno odpalane kosztowne zapytanie grupujące (tabela ogloszenia jest bardzo liczna i niektóre updaty zarżnęłyby mi bazę).

Czy da się zrobić taki trigger, aby wykonaywał zadany kod tylko raz niezależnie od liczby affected rows zapytania triggerującego?
Teoretycznie w dokumentacji http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html jest wyraźnie, że klauzula FOR EACH ROW jest zawsze wymagana więc wygląda na to, że nie da się. Może ktoś z Was zna jednak jakiś trick? Będę bardzo wdzięczny za wskazówkę.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
awakening
post
Post #2





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 12.01.2008
Skąd: Warszawa

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


a nie łatwiej przy każdym dodaniu nowego rekordu dodawać +1 do drugiej tabelki? albo -1? -2, +3 +4 itd.

Ten post edytował awakening 23.06.2009, 08:35:14
Go to the top of the page
+Quote Post
dymsza
post
Post #3





Grupa: Zarejestrowani
Postów: 62
Pomógł: 4
Dołączył: 24.08.2006

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


jeśli koniecznie chcesz count to możesz do tabeli dodać kolumny do_count i w momencie gdy wiesz że to ostatni wiersz wstawiać te kolumnę z wartością 1 a w trigerze dodać warunek
  1. IF new.do_count = 1 then
  2. TO co ma BYć
  3. end IF;



jednak lepsze to założenie triger na insert i delete i tylko updatowanie wartości w tabli z licznikiem w update table_z_licznikime set liczba = liczba + 1 (dla add ) no i odwrotnie dla delete

Ten post edytował dymsza 23.06.2009, 12:06:16
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 Aktualny czas: 21.08.2025 - 08:15