SteffiMichi Geschrieben 27. Oktober 2003 Teilen Geschrieben 27. Oktober 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
EvilNick Geschrieben 27. Oktober 2003 Teilen Geschrieben 27. Oktober 2003 Sicher kannst du mir PHP 2 Verbindungen zu verschiedenen Datenbanken aufbauen. Einfach einen zweiten Connect machen, mit einer anderen Variablen z.B. $db2 Und dann halt die konvertierung machen wie du sie brauchst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 27. Oktober 2003 Teilen Geschrieben 27. Oktober 2003 bei mysql nicht vergessen zwischen drinn immer mysql_select_db("meineDb"); [/PHP] machen. Gruß kills Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 27. Oktober 2003 Autor Teilen Geschrieben 27. Oktober 2003 vielen Dank erstmal, werde mal versuchen, das so hinzubekommen ;) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 27. November 2003 Autor Teilen Geschrieben 27. November 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MightyCats Geschrieben 27. November 2003 Teilen Geschrieben 27. November 2003 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 27. November 2003 Autor Teilen Geschrieben 27. November 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MightyCats Geschrieben 27. November 2003 Teilen Geschrieben 27. November 2003 Dazu müßte ich ungefähr wissen wie sehr die alte struktur von der neuen abweicht. DAs Überprüfen ist aber auch kein problem mit ner vorgeschalteten select anweisung vor dem insert. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 27. November 2003 Autor Teilen Geschrieben 27. November 2003 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MightyCats Geschrieben 27. November 2003 Teilen Geschrieben 27. November 2003 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 28. November 2003 Autor Teilen Geschrieben 28. November 2003 Danke erstmal, wenn ich noch irgendwo ein Problem feststellen sollte melde ich mich wieder! so long... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 28. November 2003 Autor Teilen Geschrieben 28. November 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 28. November 2003 Teilen Geschrieben 28. November 2003 Original geschrieben von SteffiMichi Mir fehlt der Ansatz. Da ja auch immer überprüft werden soll, ob der Datensatz evtl. schon in der neuen DB vorhanden ist. übernimm die alten ids und wenn du die spalte als primärschlüssel hast sollte das kein problem werden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 28. November 2003 Autor Teilen Geschrieben 28. November 2003 danke, jetzt weiß ich schon in etwa, wie es realisierbar ist, aber ich wollte vorher gerne noch einen Pseudocode aufschreiben, dazu fehlt mir momentan der Ansatz. Wenn mir da mal jemand einen Anfang machen würde wäre ich sehr dankbar! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
MightyCats Geschrieben 28. November 2003 Teilen Geschrieben 28. November 2003 Einfach die gleiche ID und ab damit in die Datenbank. sollten Datensätze dann doppelt sein liefert mysql einen fehler zurück und führt den INSERT nicht aus. Ansonsten nach der methode select * from bla where wert1=wert1 usw if mysql_numrows == 0 { insert } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 1. Dezember 2003 Autor Teilen Geschrieben 1. Dezember 2003 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! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 1. Dezember 2003 Teilen Geschrieben 1. Dezember 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 2. Dezember 2003 Autor Teilen Geschrieben 2. Dezember 2003 kleine Frage noch: Wie kann ich am elegantesten aus dem datum und der Zeit, die beide Strings sind ein Datumsformat als Datetime machen? Das ist ja erforderlich, da 'datum' in der neuen db vom Typ 'datetime' ist... thx for help Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
devniv Geschrieben 2. Dezember 2003 Teilen Geschrieben 2. Dezember 2003 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 3. Dezember 2003 Autor Teilen Geschrieben 3. Dezember 2003 Also es sind definitiv keine timestamps, nur "Textfelder" bestehend aus varchars, allerdings ist das datum dummerweise im format dd.mm.yyyy - kann man da was machen?? :confused: danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 4. Dezember 2003 Teilen Geschrieben 4. Dezember 2003 hol dir doch einfach die bestandteile des datums mit substring raus und dann kannste doch im instert alles so formatieren wie dus gerne hättest Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schledo Geschrieben 4. Dezember 2003 Teilen Geschrieben 4. Dezember 2003 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 4. Dezember 2003 Autor Teilen Geschrieben 4. Dezember 2003 @schledo habe ich so gemacht thx @kills das habe ich mit explode() gelöst, funktionierte auch ganz gut Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 4. Dezember 2003 Teilen Geschrieben 4. Dezember 2003 Original geschrieben von SteffiMichi @kills das habe ich mit explode() gelöst, funktionierte auch ganz gut stimmt ist eindeutig die bessere Lösung Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SteffiMichi Geschrieben 4. Dezember 2003 Autor Teilen Geschrieben 4. Dezember 2003 @all Es gibt doch die Funktion addslashes() in PHP. Ich habe sie versucht folgendermaßen einzusetzen: $reg_insert_abfrage = "INSERT INTO dbpk371.calendar_region_admin SET region=addslashes'($row->region)'"; das funktioniert nicht, wie muss ich es richtig machen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.