Ik heb 2 tabellen in mijn database:
- module_nieuws, afkomstig van een oude website, archief van 10.000 nieuwsitems
- posts, met tabellen, horende bij de nieuwe website, leeg

Hoe krijg ik deze beide tabellen samen? Kan dit met een query of moet dit handmatig omdat de nieuwe tabel nog leeg is?

In de beide tabellen komt de functie van de structuur op een aantal punten overeen, ze heten niet hetzelfde (voorbeeld: module_nieuws->publicatiedatum, posts->date). de gecombineerde tabel moet de structuur van posts hebben.
Je wilt dus de data van een tabel A overzetten/omzetten naar een tabel B, waarbij B op sommige punten afwijkt van structuur ten opzichte van A? Waarna A opgedoekt mag worden?
stap 1: maak een BACKUP, zodat je altijd terug kunt :)
als de oude situatie nog in gebruik is wil je mogelijk vantevoren wat downtime aankondigen en de site dan tijdelijk uit de lucht halen, maak dan vlak voor de conversie (zie verderop) een backup van de meest recente versie

stap 2: maak een zo volledig mogelijk ontwerp voor je nieuwe opzet en schrijf een conversiescript met heel veel verbale feedback (record 1 ok, record 2 ok, geen datum bij record 3, rare karakters bij record 4 et cetera)

stap 3: doe een of meer "dry runs" / conversietests op een test database, net zolang totdat alles in 1x goed wordt overgezet

stap 4: draai een tijdje met de nieuwe opzet op een testomgeving

stap 5: voer de conversie "voor eggies" uit (nadat je je site uit bedrijf hebt gehaald en nadat je een backup hebt gemaakt)
stap 5.1: maak het conversiescript onklaar of verwijder deze

stap 6: ruim je oude zut op den duur op als blijkt dat alles naar behoren werkt (maar bewaar je backup)

zoiets lijkt mij redelijk failsafe
ik heb van de oude database een uitdraai gekregen, zodat ik de nieuwe website op een nieuwe server kan opbouwen. Dus de lopende website blijft gewoon lopen.

Maar ik heb geen idee HOE ik de 2 tabellen zou moeten samenvoegen..
Het ligt eraan wat je wilt.
Wil je de oude data omzetten naar de nieuwe gegevens of wil je beide tabellen combineren.

In het eerste geval:

INSERT INTO nieuwe_tabel (kolom_n1, kolom_n2, kolom_n3)
SELECT kolom_o1, kolom_o2, kolom_o3 FROM oude_tabel


In het laatste geval:

SELECT kolom_n1, kolom_n2, kolom_n3
FROM nieuwe_tabel

UNION
SELECT kolom_o1, kolom_o2, kolom_o3
FROM oude_tabel

Waarbij je rekening moet houden dat het resultaat de kolomnamen uit de eerste select heeft.

er zijn een aantal tabellen die qua inhoud overeen en die moeten dan ook in de uiteindelijke database worden samengevoegd
(gaat om
nieuwe_tabel.post_title en oude_tabel.titel
nieuwe_tabel.post_date en oude_tabel.timestamp_publiceren
nieuwe_tabel.post_name en oude_tabel.google_url
nieuwe_tabel.post_content en oude_tabel.inhoud
nieuwe_tabel.post_excerpt en oude_tabel.inhoud_kort)

Daarnaast zijn er in beide databases nog tabellen die behouden moeten worden, dus optie 2 zou het beste zijn. Maar dat werkt niet, omdat de ene database geen entry's heeft en de andere 10.000. Ik krijg een melding "The used SELECT statements have a different number of columns" terug
Die melding heft niets te maken met het aantal rijen.

Met UNION moeten in beide selects hetzelfde aantal kolommen staan, dus is het handigste om geen SELECT * te gebruiken, maar de kolommen te benoemen.
Ik zet meestal de SELECT met de meeste kolommen eerst, de twee SELECT vul je dan aan met 'literals':

SELECT kolom_n1, kolom_n2, kolom_n3, kolom_n4, kolom_n5
FROM nieuwe_tabel

UNION
SELECT kolom_o1, kolom_o2, kolom_o3, NULL, NULL
FROM oude_tabel
Hiermee gaat de structuur van de oude database verloren?
Ik heb in de oude database nog een aantal tabellen staan die ik wel wil gehouden.
Een SELECT selecteert alleen de informatie. Als alles naar behoren werkt, en je 100% zeker bent dat alles overgezet is verwijder je zelf de data uit de oude database. Altijd aan te raden om het nog even een paar weken aan te zien of alles goed is verlopen.
en hoe zet ik de structuur van beide tabellen naast elkaar en voeg ik de gegevens van uit de volgende kolommen samen?

nieuwe_tabel.post_title en oude_tabel.titel
nieuwe_tabel.post_date en oude_tabel.timestamp_publiceren
nieuwe_tabel.post_name en oude_tabel.google_url
nieuwe_tabel.post_content en oude_tabel.inhoud
nieuwe_tabel.post_excerpt en oude_tabel.inhoud_kort

Reageren