![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
posiadam tabelę cms_news, cms_news_categories oraz cms_news_categories_handler (wiążącą newsa z kategorią). Chciałbym utworzyć trigger zmieniający wartość pola cat_meta_count w tabeli cms_news_categories na ilość aktywnych powiązań newsów z daną kategorią - w skrócie - ile jest newsów w kategorii, do której dodaje powiązanie. Próbowałem czegoś takiego:
Niestety, na SELECT COUNT jest syntax error. Innym rozwiązaniem jest dodanie jedynki do aktualnego stanu liczby newsów w kategorii:
Tu z kolei otrzymuję komunikat: Cytat #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4 Delimiter nie pomaga. Przykład jest dosłownie zerżnięty (kolokwialnie ujmując) z manuala. Z góry dzięki za pomoc, Athlan. -------------------- Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Drugi trigger wygląda jak najbardziej prawidłowo. Zauważ tylko, że używasz niewłaściwych kolumn w warunku WHERE. Wydaje mi się, że w tabeli cms_news_categories_handler zapisujesz na pewno identyfikator kategorii (handler_cat), tymczasem w warunku WHERE nie porównujesz tego z kluczem głównym (identyfikatorem kategorii) z tabeli cms_news_categories, ale porównujesz z liczbą powiązanych z daną kategorią artykułów (cat_meta_count). Gołym okiem widać, że coś jest nie tak.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Niestety, na SELECT COUNT jest syntax error. Wrzuć całego SELECTa, w nawiasy - bo teraz nie wiadomo np. czy WHERE odnosi się do wewnętrznego SELECTa, czy do UPDATEa
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Tyle, że w pierwszym podanym przez Ciebie triggerze również używasz niewłaściwych kolumn (przynajmniej tak mi się wydaje) w klauzuli WHERE i brakuje inkrementacji (nigdzie nie dodajesz 1).
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
po małych modyfikacjach zapytania:
Wyrzuca mi tym razem (niezrozumiale) błąd: Cytat #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' handler_item) FROM cms_news_categories_handler WHERE cat_id = NEW.handler_cat);' at line 4 O ile pamiętam, nikt nigdy nie zabraniał countu po dwóch unikatowych polach ![]() -------------------- Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 855 Pomógł: 145 Dołączył: 17.07.2008 Skąd: High Memory Area Ostrzeżenie: (0%) ![]() ![]() |
No to coś źle pamiętasz.
http://dev.mysql.com/doc/refman/5.1/en/gro...#function_count Możesz spróbować COUNT(DISTINCT kol1,kol2) |
|
|
![]()
Post
#7
|
|
![]() Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Świetnie, działa. Dla przyszłych pokoleń: nie zapomnijcie zmienić delimiter w phpMyAdmin pod okienkiem wykonywania zapytania na inny niż ";"
Finalne zapytanie:
-------------------- Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 20:24 |