Więc mam dwie tabele tak ...
MySQL Wyzwalanie zdarzeń Wstaw/aktualizacja
ext_words
-------------
| id | word |
-------------
| 1 | this |
-------------
| 2 | that |
-------------
| 3 | this |
-------------
ext_words_count
---------------------
| id | word | count |
---------------------
| 1 | this | 2 |
---------------------
| 2 | that | 1 |
---------------------
Próbuję utworzyć wyzwalacz, który będzie:
- aktualizacja
ext_words_count.count
gdyext_words.word
jest aktualizowany .
Aby jeszcze bardziej skomplikować sprawy,
- jeśli
ext_words.word
nie istnieje wext_words_count
gdyext_words
jest aktualizowana, chciałbym, aby wstawić go doext_words_count
i ustawićcount
jako 1.
I szukałem podobnych pytań:
1. Before/after insert trigger using auto increment field i
2. Using Trigger to update table in another database
próbuje połączyć 2. Oto co mam do tej pory:
DELIMITER $$
CREATE TRIGGER update_count
AFTER UPDATE ON ext_words
FOR EACH ROW
BEGIN
UPDATE ext_words_count
SET word_count = word_count + 1
WHERE word = NEW.word;
END;
$$
DELIMITER ;
Wszelkie porady i kierunek jest bardzo mile widziane. A może jeszcze inna metoda, którą przeoczyłem i jak zawsze z góry dziękuję!
UPDATE:
I wybrały przy użyciu 2 wyzwalacze, jeden dla INSERT i jeden do aktualizacji, ponieważ nie jestem zaznajomiony z instrukcji warunkowych w MySQL.
DELIMITER $$
CREATE TRIGGER insert_word AFTER INSERT ON ext_words
FOR EACH ROW
BEGIN
INSERT IGNORE INTO ext_words_count (word) VALUES (NEW.word);
END;
$$
DELIMITER ;
i
DELIMITER $$
CREATE TRIGGER update_word AFTER UPDATE ON ext_words
FOR EACH ROW
BEGIN
UPDATE ext_words_count
SET word_count = word_count + 1
WHERE word = NEW.word;
END;
$$
DELIMITER ;
Kwerenda INSERT działa świetnie, jednak zapytanie UPDATE nie aktualizuje word_count
. Czy jest coś, czego mi brakowało w zapytaniu o aktualizację?
może chcesz zobaczyć to, [MySQL przeciwpożarowe Wyzwalacz dla wstawiania i aktualizacji] (http://stackoverflow.com/questions/1318224/mysql-fire-trigger-for-both-insert-and-update) Czy moje rozwiązanie zadziałało? Jaki był wynik, który chciałbym poprawić. Pamiętaj, że nie możesz zaktualizować tej samej tabeli, do której wywołujesz wyzwalacz w MySQL –
@GrijeshChauhan - Dzięki za link! Nie jestem w stanie uzyskać odpowiedzi, ale to dlatego, że jestem nowy w przypadku instrukcji warunkowych w MySQL, a nie z powodu twojego rozwiązania. – Drewness
Mam na myśli to, że gdy ext_words jest zaktualizowane, jeśli słowo nie znajduje się w ext_words_count, to chcę je wstawić i zrobić licznik 1. W przeciwnym razie, jeśli słowo jest w ext_words_count, zwiększ liczbę o 1 ... – Drewness