Autor | Zpráva | ||
---|---|---|---|
MagicPowa Profil |
#1 · Zasláno: 9. 2. 2010, 09:36:54 · Upravil/a: MagicPowa
Zdravím, v MySQL databázi pomocí phpMyAdmina potřebuju využít TRIGGER na následující situaci. Mám dvě tabulky:
UŽIVATELÉ - id_uzivatel, jmeno, prijmeni, viditelny (0-ne, 1-ano) 1 | Jméno | Příjmení | 1 2 | Jméno | Příjmení | 1 KOMENTÁŘE - id_komentar, id_uzivatel, text, viditelny (0-ne, 1-ano) 1 | 1 | text | 1 2 | 1 | text | 1 3 | 2 | text | 1 Potřeboval bych TRIGGER, který udělá, že pokud uživateli s ID 1 dám viditelnost 0, tak se všechny komentáře, který mají ID_UZIVATEL 1 skrejou, tudíž dostanou 0 a tabulka komentáři by vypadala takto: KOMENTÁŘE - id_komentar, id_uzivatel, text, viditelny (0-ne, 1-ano) 1 | 1 | text | 0 2 | 1 | text | 0 3 | 2 | text | 1 Napsal jsem si tedy TRIGGER: CREATE TRIGGER skryvani AFTER UPDATE ON uzivatele FOR EACH ROW UPDATE komentare SET komentare.viditelnost = '0' WHERE uzivatele.id_uzivatel = komentare.id_uzivatel TRIGGER prošel bez problémů ale pokud udělám nějakou změnu, ve zmiňovaných tabulkách, tak mi to vypíše, že tabulka uzivatele neexistuje. Zkoušel jsem to ještě řešit pomocí INDEX sloupců a ON UPDATE, jenomže to přepisovalo viditelnost u všech uživatelů a ne jen u konkrétního ID_UZIVATEL. Díky za pomoc. |
||
Kajman_ Profil * |
#2 · Zasláno: 9. 2. 2010, 10:15:08
WHERE NEW.id_uzivatel = komentare.id_uzivatel AND NEW.viditelny=0 |
||
MagicPowa Profil |
#3 · Zasláno: 9. 2. 2010, 12:08:35
CREATE TRIGGER skryvani AFTER UPDATE ON uzivatele FOR EACH ROW UPDATE komentare SET komentare.viditelnost = '0' WHERE NEW.id_uzivatel = komentare.id_uzivatel AND NEW.viditelny = '0' Funguje výborně, ale pokud bych chtěl, opak tedy zobrazení, tak založím TRIGGER CREATE TRIGGER zobrazeni AFTER UPDATE ON uzivatele FOR EACH ROW UPDATE komentare SET komentare.viditelnost = '1' WHERE NEW.id_uzivatel = komentare.id_uzivatel AND NEW.viditelny = '1' ale napíše to, že TRIGGER už existuje. Jakto? Když jsem ho pojmenoval jinak. |
||
Kajman_ Profil * |
#4 · Zasláno: 9. 2. 2010, 12:48:17
Ale na to stačí jediný (víc pro danou událost asi povoleno není) trigger...
...SET komentare.viditelnost=NEW.viditelny WHERE NEW.id_uzivatel = komentare.id_uzivatel Ale přiznám se, že mi uniká význam takového flagu. Při vypisování komentářů se přece můžete podívat, zda uživatel není zakázaný a pak nezobrazovat i nezákazaný komentář. Pokud ten údaj v tabulce komentare je vždy podle uživatele, tak jde o redudnaci dat a není třeba. Pokud ten údaj umožňuje jemné ladění, tak při úpravě uživatele přijdete o všechny upravené flagy zobrazování u jeho příspěvků. |
||
MagicPowa Profil |
#5 · Zasláno: 9. 2. 2010, 13:49:24
To, že uniká význam se ani nedivím, jde mi totiž o pochopení toho principu. Využívám to jinde než u komentářů a uživatelů. Každopádně děkuji moc za pomoc frčí to dobře.
|
||
Časová prodleva: 14 let
|
0