Queries in 2 databases uitvoeren
Hoe jij dat verder in PHP oplost is natuurlijk een andere zaak. Je kunt prima een functie schrijven voor het selecteren van gegevens die maar 1 database gebruikt en een andere functie voor het updaten/invoegen van gegevens die beide databases (en dus 2 queries) gebruikt.
Verder snap ik dan nog steeds het nut van de tweede (dubbele) database niet. Wat zie je daar in hemelsnaam voor voordeel in?
Voorbeeldje:
DB 1, test:
Code (php)
1
2
3
4
5
2
3
4
5
CREATE TABLE som_1 (
id int(11) NOT NULL auto_increment,
totaal int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
id int(11) NOT NULL auto_increment,
totaal int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
DB 2, testje:
Code (php)
1
2
3
4
5
2
3
4
5
CREATE TABLE som_2 (
id int(11) NOT NULL auto_increment,
totaal int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
id int(11) NOT NULL auto_increment,
totaal int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Trigger in DB 1 op tabel som_1:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
CREATE TRIGGER
test.totaal
AFTER INSERT ON
test.som_1
FOR EACH ROW
INSERT INTO
testje.som_2 (
totaal
)
VALUES(
NEW.totaal
);
test.totaal
AFTER INSERT ON
test.som_1
FOR EACH ROW
INSERT INTO
testje.som_2 (
totaal
)
VALUES(
NEW.totaal
);
Werkt prima en je bent niet afhankelijk van een PHP-scriptje.
Edit: Vergeet de UPDATE en DELETE-triggers niet, die zul je ook moeten aanmaken.
Daarnaast blijft het een twijfelachtige situatie, het is vragen om problemen. Een goed datamodel voorkomt een hele hoop ellende.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
pgFrank schreef op 11.04.2008 14:55:
Waarom gebruik je geen trigger? Zet een trigger op de tabel in database 1 die bij een INSERT, UPDATE of DELETE automatisch database 2 bijwerkt. Dat hoef je dan niet vanuit PHP te gaan regelen, het is de database die daar voor zorgt. Beide databases moeten wel op dezelfde server draaien, anders zal het niet lukken.
Voorbeeldje:
DB 1, test:
DB 2, testje:
Trigger in DB 1 op tabel som_1:
Werkt prima en je bent niet afhankelijk van een PHP-scriptje.
Edit: Vergeet de UPDATE en DELETE-triggers niet, die zul je ook moeten aanmaken.
Daarnaast blijft het een twijfelachtige situatie, het is vragen om problemen. Een goed datamodel voorkomt een hele hoop ellende.
Voorbeeldje:
DB 1, test:
Code (php)
1
2
3
4
5
2
3
4
5
CREATE TABLE som_1 (
id int(11) NOT NULL auto_increment,
totaal int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
id int(11) NOT NULL auto_increment,
totaal int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
DB 2, testje:
Code (php)
1
2
3
4
5
2
3
4
5
CREATE TABLE som_2 (
id int(11) NOT NULL auto_increment,
totaal int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
id int(11) NOT NULL auto_increment,
totaal int(11) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Trigger in DB 1 op tabel som_1:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
CREATE TRIGGER
test.totaal
AFTER INSERT ON
test.som_1
FOR EACH ROW
INSERT INTO
testje.som_2 (
totaal
)
VALUES(
NEW.totaal
);
test.totaal
AFTER INSERT ON
test.som_1
FOR EACH ROW
INSERT INTO
testje.som_2 (
totaal
)
VALUES(
NEW.totaal
);
Werkt prima en je bent niet afhankelijk van een PHP-scriptje.
Edit: Vergeet de UPDATE en DELETE-triggers niet, die zul je ook moeten aanmaken.
Daarnaast blijft het een twijfelachtige situatie, het is vragen om problemen. Een goed datamodel voorkomt een hele hoop ellende.
Kijk met zo'n antwoord ben ik nou blij. Hij geeft me de oplossing die hij het beste vindt en ik op dit moment ook en tevens geeft hij daarna pas commentaar. Zoals ik al eerder heb gezegd maakt het niet uit waar ik het voor ga gebruiken, ik kan je wel vertellen dat het niks te maken heeft met mijn database model aangezien die gewoon goed is en het niks te maken heeft met data uit 2 databases te vissen..
Tevens werkt dit in MySql of moet ik daar een ander soort database voor draaien? En zo ja, werkt dit ook als iemand iets via phpmyadmin invoegt(oftewel zet hij het dan ook in beide databases?)
In PMA klop je in het SQL-tabblad gewoon de code in om een trigger aan te maken en klaar ben je. Het aanmaken van een trigger doe je gewoon met een stuk SQL, niks bijzonders dus.
Jouw datamodel is wel van twijfelachtige kwaliteit, het kan vrijwel onmogelijk correct zijn dat data over 2 databases is uitgesmeerd. Dataintegriteit is dan namelijk onmogelijk te garanderen. Maar ja, dat kan MySQL toch al niet garanderen, dus wat dat betreft zit je al tot over je oren in de shit... Sterkte!
pgFrank schreef op 11.04.2008 15:48:
Dit werkt vanaf MySQL 5.0 (die is al járen oud, zul je dus wel over beschikken), andere databases hebben dit al veel langer in huis. MySQL zuigt aan alle kanten en is volgens de handleiding ook volkomen onbetrouwbaar, alleen een goede dba die geen fouten maakt, kan hier data redelijk veilig in beheren. MySQL kan dat (wil dat) zelf niet doen.
In PMA klop je in het SQL-tabblad gewoon de code in om een trigger aan te maken en klaar ben je. Het aanmaken van een trigger doe je gewoon met een stuk SQL, niks bijzonders dus.
Jouw datamodel is wel van twijfelachtige kwaliteit, het kan vrijwel onmogelijk correct zijn dat data over 2 databases is uitgesmeerd. Dataintegriteit is dan namelijk onmogelijk te garanderen. Maar ja, dat kan MySQL toch al niet garanderen, dus wat dat betreft zit je al tot over je oren in de shit... Sterkte!
In PMA klop je in het SQL-tabblad gewoon de code in om een trigger aan te maken en klaar ben je. Het aanmaken van een trigger doe je gewoon met een stuk SQL, niks bijzonders dus.
Jouw datamodel is wel van twijfelachtige kwaliteit, het kan vrijwel onmogelijk correct zijn dat data over 2 databases is uitgesmeerd. Dataintegriteit is dan namelijk onmogelijk te garanderen. Maar ja, dat kan MySQL toch al niet garanderen, dus wat dat betreft zit je al tot over je oren in de shit... Sterkte!
lol, bedankt voor je reactie. Ja, zelf zat ik ook al na te denken om iets anders als mysql te gaan gebruiken, maar ik geloof dat phpbb niet met een andere werkt en zo wel, kan je de database dan omzetten zodat het met een andere werkt?
Achja, en hoe zal ik anders 2 identieke databases naast elkaar laten draaien?
PHPbb draait op MySQL, PostgreSQL, SQL Server, Microsoft Access en met wat aanpassingen ook op Oracle. Keuze genoeg dus.
dat snap ik, maar is een bestaande mysql database om te zetten naar een PostgreSQL database zonder inhoud verlies?
Aftrappen met PostgreSQL.
En voordat je gaat migreren, ga je natuurlijk eerst testen. Maar dat is logisch.
Ps. Vergeet de handleiding van PHPbb niet, daar staat waarschijnlijk ook al in hoe je e.e.a. moet doen.
Ja hoor, dat kan. PostgreSQL heeft daar zelfs tools voor in huis. Maar voordat je hier aan begint, ga eerst eens testen met pgSQL om er kennis mee te maken. Het is nét even iets anders. Zie ook de tutorial En voordat je gaat migreren, ga je natuurlijk eerst testen. Maar dat is logisch.
Ps. Vergeet de handleiding van PHPbb niet, daar staat waarschijnlijk ook al in hoe je e.e.a. moet doen.