Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
pyrin
Člen
Avatar
pyrin:30.4.2017 12:08

Dobrý den všem,
mám MySQL v 5.5.47, tabulku reg_param se sloupci idParam, valParam a statParam. Počet řádku tabulky je cca 100 (zatím). Potřebuji při změně hodnoty ve sloupci statParam něco spustit a hodnotu statParam nastavit na 0. Do teď to dělám tak, že periodicky prohledávám sloupec statParam a tam kde je hodnota <> 0, tak si spustím co potřebuji a hodnotu statParam v příslušném řádku nastavím na 0. Takto to dělám v C a funguje to. Nevýhodou je, že musím mít v C nějaký časovač a pořád se točím dokola a prohledávám sloupec statParam.
Našel jsem si, že MySQL podporuje trigger. Tak jsem zkoušel následující:
CREATE TRIGGER trStatParam
ON reg_param
AFTER UPDATE
FOR EACH ROW
BEGIN
IF reg_param.statParam <> 0 THEN
UPDATE reg_param SET statParam = 0;
END IF;
END;

Toto mi vyhodí chybu 1064 syntax error na řádku 7. Ano, zdá se mi, že na tomto řádku je chyba, a napadá mně, jak MySQL pozná, do jakého řádku tabulky má provést modifikaci změny hodnoty sloupce statParam ?
Lze prosím trigger vůbec použít k tomu, abych zmodifikoval na základě změny hodnoty v určitém sloupci v určitém řádku na požadovanou hodnotu ?
Děkuji za případné názory a nakopnutí. Jirka.

 
Odpovědět
30.4.2017 12:08
Avatar
Odpovídá na pyrin
Michal Štěpánek:30.4.2017 12:24

Když napíšeš

UPDATE reg_param SET statParam = 0;

tak nastavíš tu hodnotu u všech řádků.
Musel bys tam mít

UPDATE reg_param SET statParam = 0 WHERE identifikatorradku = nejakahodnota;

Jak se ti vůbec dostává do toho "statParam" jiná hodnota než 0?

Editováno 30.4.2017 12:26
Nahoru Odpovědět
30.4.2017 12:24
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
pyrin
Člen
Avatar
Odpovídá na Michal Štěpánek
pyrin:30.4.2017 12:38

Díky za odpověď.
Selskym rozumem mi je jasný, že tam ten identifikátor řádku nějak chybí. Ale nevím kde ho vzít. Pochopil jsem Trigger tak, že on za mně prohlídne celý sloupec a tam kde je hodnota různá od 0, tak provede to co je v tom IFu. Tudíž jsem se domníval, že ví, v jakém řádku je a tak jej zmodifikuje. Jenže tomu tak není. Takže můj problém je, že nevím, kde ten idParam, tedy id řádku vzít.

Tak a jak se mi tam dostane jiná hodnota ? Buď si jí tam nacpu třeba přes phpMyAdmin nebo prakticky mám webovou stránku, kde mám tlačítka NAČTI a ZAPIŠ. NAČTI po stisknutí zapíše hodnotu 1 a ZAPIŠ hodnotu 2. To co se děje k tomu dál ve stávajícím systému, zjednodušeně: zakomunikuje s nějakým jednočipem a ten mi vrátí hodnotu parametru a nebo nevrátí a mám timeout. Takže hodnota toho statusu má asi 7 stavů.

 
Nahoru Odpovědět
30.4.2017 12:38
Avatar
Odpovídá na pyrin
Michal Štěpánek:30.4.2017 13:35

Podle čeho tedy pracuješ s konkrétním záznamem v tabulce? Nějak ten záznam přece musíš najít a vybrat, ne?

Nahoru Odpovědět
30.4.2017 13:35
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
pyrin
Člen
Avatar
Odpovídá na Michal Štěpánek
pyrin:30.4.2017 16:46

Mno tím mým současným způsobem prohledávám celý sloupeček řádek po řádku. Tuto funkci volám v C každou sekundu. Což mi přijde jako mrhání strojovým časem. Tak jsem si myslel, že právě TRIGGER příkazem FOR EACH ROW to udělá za mně a že mi rovnou v příslušném řádku tou podmínkou "IF něco" tu hodnotu nastaví na 0 a ještě mi zavolá nějakou mojí funkci v C.

 
Nahoru Odpovědět
30.4.2017 16:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.