Zum Inhalt springen

Datenbankinhalte übernehmen


Empfohlene Beiträge

Hallo,

ich habe folgendes Problem:

für einen Programmkalender wurden bisher die Daten in einer MySQL-DB abgespreichert. Jetzt wurde eine neue DB angelegt, die aber eine völlig andere (zwar sinnvollere) Struktur hat. Wie kann ich jetzt am elegantesten die Inhalte der "alten" DB in die neue übernehmen? Geht das mit PHP und kann ich auf 2 DBs gleichzeitig zugreifen nach dem Motto "nimm das von der einen dorthin in die andere" ?

Bin für jede Hilfe / Tipp dankbar, bei Verständnisproblemen --> nachfragen!

Gruß

StMi

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 5 Wochen später...

Hallo,

nach einiger Zeit habe ich diese Aufgabe mal wieder aufgegriffen und die Verbindung zu zwei Datenbanken aufgebaut.

Da ich Neuling in PHP / MySQL bin hier mal der Code (bin für Verbesserungsvorschläge dankbar, obwohl man ja hier noch nicht viel falsch machen kann).

db_connect.php


<?
$server = "localhost";
$user = "root";
$pass = "";
$conn = mysql_connect($server, $user, $pass);
if(!($conn))
{
echo "<B>Verbindung zum MySQL-Server konnte nicht hergestellt werden</B>";
exit; //Script beenden
}
/*else
{
echo "Verbindung erfolgreich";
} */
$select1 = mysql_select_db("alte datenbank",$conn); // "alte" Datenbank
$select2 = mysql_select_db("neue datenbank",$conn); // "neue" Datenbank
?>
[/PHP]

Jetzt bräuchte ich nur mal ein Beispiel, wie ich Daten aus einer Tabelle der einen DB in eine Tabelle der anderen bekomme.

Vielen Dank!!

StMi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde das ganze so lösen und je nachdem was spalte1, spalte2 bei dir werden soll dadurch ersetzen.

Ist meiner Meinung nach die schnellste und einfachste Lösung das zu realisieren.


$query= mysql_query("SELECT * FROM tb_daten_alt ORDER BY primärschlüssel",$select1);

while($result = mysql_fetch_array($query))
{
$spalte1 = $result[spalte1];
$spalte2 = $result[spalte2];

$insert = mysql_query("INSERT INTO tb_daten_neu (spalte1,spalte2) VALUES ('spalte1','spalte2')",$select2);

}
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich das richtig sehe, wäre diese Lösung geeignet, wenn ich die kompletten Tabellenspalten so wie sie sind übernehmen wöllte.

Ich soll aber folgendes machen:

- daten in neue Struktur übernehmen

- prüf. ob daten bereits existieren

- wenn nein, eintragen

und dazu fehlt mir der Ansatz, bin für weiter Hilfe dankbar!

STMi

Link zu diesem Kommentar
Auf anderen Seiten teilen

also hier mal in etwa die wichtigsten Daten:

Alte Tabelle:

'timetable'

ID, datum, zeit, kategorie, stadt, location, title, beschreibung, bild, tip

Neue Tabellen:

'events'

id, kat_id, location_id, event, kurzbeschr, beschr, datum, best_event, toprint, stopper,

image_key, data, status

'locations'

id, region_id, location, beschreibung, str, zip, ort, fon, email, www, sign, uid

...

Bitte nur, wenn s nicht zu viel Arbeit macht...

Das ist quasi mein erstes Beispiel, nach dem ich meine weiteren aufbauen kann / werde.

Danke!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das würde dann nur gehen wenn du ein Select über alle bestehenden Tabellen machst, alle werte in variablen steckst und soviele inserts machst wieviel neue tabellen es geben soll, nebenzu dann noch die neue id auslesen damit die verlinkung in die anderen tabellen wieder passt.

Also erst SELECT bla.wert1, bla.wert3, bla2.wert5 from tb_daten1 as bla, tb_daten2 as bla2 WHERE bla.id = bla2.bla_id usw

und dann in der while schleife ein


$wert1 = $result[bla.wert1];
$wert5 = $result[bla2.wert5];
$wert3 = $result[bla.wert3];

mysql_query=("INSERT INTO tb_daten_neu (wert1,wert5) VALUES ('$wert1', '$wert5')");
$result = mysql_query("SELECT id FROM tb_daten_neu ORDER BY id DESC LIMIT 0,1");
$daten_neu_id = mysql_result($result,0,"id");
mysql_query=("INSERT INTO tb_daten_neu2 (daten_neu_id,wert3) VALUES ($daten_neu_id, '$wert3')");
[/PHP]

Das is atm die einzigste möglichkeit die mir einfällt wie man schnell alle Daten in eine neue STruktur bringt.

Ich hoffe das wars was du brauchst bzw was du willst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich bin gerade dabei mir den Ablauf des Skriptes als Pseudocode, bzw. kleinen Programmablaufplan zusammen zu stellen, aber komme irgendwie nicht voran.

Mir fehlt der Ansatz. Da ja auch immer überprüft werden soll, ob der Datensatz evtl. schon in der neuen DB vorhanden ist.

Vielleicht ist die Aufgabe auch zu schwer für einen "Anfänger" aber ich muss sie lösen...

Ich glaube wenn ich den Ablauf einigermaßen kenne, werde ich es auch besser verstehen.

thx for help

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von MightyCats

Also erst SELECT bla.wert1, bla.wert3, bla2.wert5 from tb_daten1 as bla, tb_daten2 as bla2 WHERE bla.id = bla2.bla_id usw

Kannst du mir vielleicht die Select noch etwas genauer erläutern, die ist mir doch etwas zu allgemein gehalten, wie genau funktioniert das denn mit dem AS, bzw was macht das genau.

Vielleicht kannst du die Select mal mit Beispielen statt 'bla' füllen?? Wäre sehr nett, danke!

Link zu diesem Kommentar
Auf anderen Seiten teilen

das kannst du ganz einfach ausprobieren.

mach nen sql auf deine db mit nem sql editor und schreibe halt ma:

select id as bla from [deine tablle]

damit kannst du die spaltennamen temporär ändern! also nur in dem sql statement. in der tabelle werden keine namen geändert. man könnte auch sagen du vergibst einen alias (as) -namen für eine spalte

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn das datum aus YYYY-MM-DD besteht und die Zeit aus HH:MM:SS, dann mach doch einfach

$datumzeit = $datum." ".$zeit;

Das sollte eigentlich ausreichen...

wenn du allerdings ein TIMESTAMP-Feld hast, musst du die Bindestriche weg-Regexpen.. Bei Timestamp-Feldern ist noch zu beachten, dass sie sich bei jedem ändern des Datensatzes mitändern... ich bin mal drüber gestolpert und hab deswegen die ganzen Timestamp-Felder in DATETIME-Felder umgewandelt, damit mir sowas nicht wieder passiert...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kleine Feinheit am Rande:

Bei Derartigem würde ich nicht zwischendurch immer mysql_select_db() verwenden, dies kann schnell unübersichtlich werden, auf welche DB sich die Abfrage nun bezieht.

Um zu sehen welche DB mit der Abfrage gemeint ist, würde ich vorschlagen die Datenbank direkt in die Query zu schreiben (sinnvollerweise als Variable). Zum Beispiel so:


$sqldb1 = "db_old"; // eben wie die DBs auch immer heißen
$sqldb2 = "db_new";

$sql = "SELECT Felder FROM $sqldb1.Tabelle WHERE ....";
$sql = "SELECT Felder FROM $sqldb2.Tabelle WHERE ....";

usw...

[/PHP]

Also quasi die Datenbank direkt mit einem Punkt in die Abfrage schreiben :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...