Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
mám dvě databáze (nazvěme je první a druhá).
Dejme tomu, že první databáze má tabulku usersBB, druhá databáze má tabulku jenom users.
Tabulka usersBB v první databázi vypadá následovně:
usersBB = [bbID, bbNickname, bbPassword, ... ]
Tabulka users v druhé databázi vypadá následovně:
users = [ID_user, nick, gender, pass, gravatar, mail, law, group, colorOfNick, last_activity, isOnline]
No já potřebuji zajistit následující:
Pokaždé, když se přidá, upraví, smaže řádek z první tabulky (první databáze), tak aby se to projevilo i u druhé tabulky (druhá databáze).
Takže, pokud se v první tabulce udělá třeba INSERT (nový uživatel), tak mi stačí naklonovat (zkopírovat) bbID, bbNickname, bbPasword, možná i některé další sloupce z tabulky usersBB do tabulky users.
To znamená prakticky (pseudojazykem) toto:
databáze2.users.ID_user = databáze1.usersBB.bbID
databáze2.users.nick = databáze1.usersBB.bbNickname
databáze2.users.pass = databáze1.usersBB.bbPassword
Vůbec nevím co s tím, používám PHP a MySQL.
Byl jsem odkázán na TRIGGER, potřeboval bych ukázku přímo k tomuto problému. Dynamicky to (nějak) zajistit.
Snad mi rozumíte. Nějaké rady, nápady?
Díky, RePRO.
Offline
V MySQL už jsem nedělal ani nepamatuju (a triggery vůbec), ale třeba pro MSSQL by to mohlo vypadat nějak takhle...
CREATE TRIGGER tr_usersBB_ins ON usersBB
FOR INSERT
AS
BEGIN
INSERT INTO database2.users (ID_user, nick, pass)
SELECT bbID, bbNickname, bbPassword FROM inserted
END
CREATE TRIGGER tr_usersBB_del ON usersBB
FOR DELETE
AS
BEGIN
DELETE FROM database2.users WHERE ID_user IN (SELECT bbID FROM deleted)
END
S tim, že nevim, jestli to půjde z jedný databáze na druhou jednoduše nebo bude potřeba něco ponastavovat. V MySQL bude jazyk pro zápis triggeru vypadat asi trochu jinak...
Trigger je vlastně něco jako funce přiřazená tabulce, která se spustí, pokud nastane na tabulce nějaká akce (např. FOR INSERT znamená, že se to spustí v průběhu vkládání do tabulky). Tabulka inserted by měla obsahovat všechny řádky, které se uživatel pokouší vložit.
Offline
Super, díky. Pro ukázku mi to určitě stačí...
No a ten Trigger vytvořím kde? Omlouvám se za hloupé dotazy, ale potřebuju v tom mít jasno. :-)
Offline
↑ RePRO:
V phpmainadminu (nebo co používáš) dáš do pole pro ruční vkládání sql příkazů a potvrdíš (prostě uděláš to co s ostatními sql příkazy).
Jen si najdi dokumentaci k mysql a zkontroluj syntaxi mezi myslq a MSSQL může být trochu rozdíl.
Offline
Zdravím,
ano, TRIGGERS nejsou žádná věda, musíme si však ale uvědomit, že já mám každou tabulku v jiné databázi.
Použít USE? Jak se to řeší? Každopádně díky za připomínky.
Offline
Určitě budeš ten trigger vytvářet na tý tabulce usersBB, jak se odkázat v tom triggeru na cizí databázi v MySQL (a vlastně asi ani v MSSQL) pořádně nevim, ale to určitě půjde vygooglit. Asi bych zkusil do toho triggeru dát normálně USE.
Offline