Bij Pronamic zijn we afgelopen maanden druk bezig geweest met het omzetten van een grote maatwerk website naar WordPress. Hierbij hadden we ook de opdracht om alle bestaande berichten, foto’s, video’s, evenementen, etc. te importeren naar WordPress.
Het importeren van deze content naar WordPress realiseren we door de oude database in te lezen met PHP en de berichten in WordPress te plaatsen. Aangezien het om duizenden berichten gaat doen we het importeren in fases. We houden daarom in de oude database per item bij wat geïmporteerd is en wat fout ging. Hiervoor hebben een tweetal BOOLEAN kolommen toegevoegd aan een aantal tabellen.
ALTER TABLE content ADD wordpress_imported BOOLEAN NOT NULL DEFAULT FALSE; ALTER TABLE content ADD wordpress_failed BOOLEAN NOT NULL DEFAULT FALSE; ALTER TABLE media ADD wordpress_imported BOOLEAN NOT NULL DEFAULT FALSE; ALTER TABLE media ADD wordpress_failed BOOLEAN NOT NULL DEFAULT FALSE;
Omdat de oude website nog steeds live staat en er nog dagelijks nieuwe berichten worden geplaatst ontvangen we regelmatig een nieuwe database dump. In deze nieuwe datadump zijn echter niet bovenstaande kolommen met data opgenomen. Om te voorkomen dat we oude berichten voor een tweede keer importeren moeten we deze kolommen dus weer toevoegen aan de nieuwe data.
Gelukkig kun je met MySQL eenvoudig in een query meerdere databases raadplegen en dus op deze manier gegevens uit meerdere databases synchroniseren. Allereerst zorgen we er voor dat we bovenstaande queries uitvoeren en vervolgens synchroniseren we de data met behulp van de volgende query:
UPDATE database_2.media AS targetTable INNER JOIN database_1.media AS sourceTable ON sourceTable.id = targetTable.id SET targetTable.wordpress_imported = sourceTable.wordpress_imported , targetTable.wordpress_failed = sourceTable.wordpress_failed ; UPDATE database_2.content AS targetTable INNER JOIN database_1.content AS sourceTable ON sourceTable.id= targetTable.id SET targetTable.wordpress_imported = sourceTable.wordpress_imported , targetTable.wordpress_failed = sourceTable.wordpress_failed ;
Stackoverflow: http://stackoverflow.com/questions/1675333/php-mysql-joins-across-databases
We hebben bij Pronamic inmiddels vrij veel ervaring met het omzetten van zeer grote maatwerk websites naar WordPress. Mocht je ook een grote maatwerk website willen omzetten naar WordPress dan kunnen we helpen met het overzetten van de bestaande content.