Mailinglisten-Archive |
Hi Harald, Zitat von ANGEL Harald <angel at egston.com>: > Guten Morgen! *gähn* > > > warum hast Du denn 12 einzelne Tabellen, die identisch aufgebaut sind? > weil das früher in access gelaufen ist.. und das hatte grobe speed probs... > jetzt haben wir das abhängig von der userid aufgesplittet. > in jeder tab sind jetzt ca 30000 sätze drin. > nur wieder zusammenfügen (was ich auch wollte) wird schwierig, weil das > autowert-feld meinungsid im feld parent drinsteckt.. > wenn ich die jetzt zusammenkopier passt meine baumstrucktur nicht mehr... ah, ok. :-) Das verstehe ich. D.h. Du koenntest die Daten prinzipiell schon zusammenkopieren, aber Du hast das Problem, dass Dein ID-Feld meinungsid in Deinen MySQL-Tabellen auf autoincrement gesetzt ist? Ich habe mir gerade ueberlegt, wie Du das loesen koenntest. :-) Ich hoffe, das klappt auch. Du kannst es ja mal testweise ausprobieren, wenn Du Zeit und Lust hast. :-) Also angenommen, Du hast 12 Tabellen, die jetzt z.B. folgende Felder haben: meinungsid (autoincrement, primary key) parent userid meinung Weitere Voraussetzungen: (1) Ein Wert fuer meinungsid kann zwar in einer Tabelle nur einmal vorkommen (primary key), wird aber auch in bis zu elf anderen Tabellen vorkommen. D.h. in einer gemeinsamen Tabelle wuerde eine ID, die eigentlich Primaerschluessel sein soll, bis zu 12 Mal vorkommen. (2) Ein Wert im Feld parent bezieht sich nur auf eine meinungsid innerhalb einer Tabelle und kann sich nicht auf eine meinungsid in einer anderen Tabelle beziehen. Unter diesen Voraussetzungen wuerde ich folgendes machen: a) Ich wuerde eine gemeinsame Tabelle fuer die Datensaetze in den bisherigen 12 Tabellen mit folgenden Feldern anlegen: meinungsid (autoincrement, primary key) parent userid meinung ALT_meinungsid ALT_tabelle b) Nun wuerde ich die die Daten aus den 12 Tabellen in die gemeinsame Tabelle uebernehmen: - meinungsid in der neuen Tabelle wird mit autoincrement automatisch neu gesetzt. - parent, userid und meinung werden 1:1 aus der alten in die neue Tabelle umgefuellt. - ALT_meinungsid in der neuen Tabelle wird mit der meinungsid aus der alten Tabelle gefuellt. - ALT_tabelle in der neuen Tabelle wird mit der Nummer der alten Tabelle belegt (also z.B. mit einem Wert aus dem Zahlenbereich 1...12). c) Nachdem Du die Daten umgefuellt hast, wird es interessant. :-) Jetzt korrigierst Du die Eintraege im Feld parent. Dazu laeufst Du alle Datensaetze in der neuen Tabelle durch und ziehst die meinungsid und die zugehoerigen Werte ALT_meinungsid und ALT_tabelle: select meinungsid as parentNeu, ALT_meinungsid as parentAlt, ALT_tabelle as tabelleAlt from neue_tabelle; Anschliessend laeufst Du alle Ergebniszeilen der Select-Abfrage durch und ersetzt dabei in der gesamten neuen Tabelle die alten Werte in parent mit den passenden neuen. Die Ersetzung sieht dann in der Schleife ungefaehr so aus: update neue_tabelle set parent=parentNeu where parent=parentAlt and ALT_tabelle=tabelleAlt; Jetzt sollten die IDs im Feld parent passend zu den von MySQL automatisch vergebenen IDs im Feld meinungsid der neuen Tabelle sein - wenn ich mich jetzt nicht selbst ausgetrickst habe. :-) (Ich bin naemlich auch noch nicht so ganz wach... ;-) ) d) Nach einem ausfuehrlichen Test, ob die Datenstruktur jetzt konsistent uebernommen worden ist, kannst Du die Felder ALT_tabelle und ALT_meinungsid aus der neuen Tabelle loeschen. Sie haben ihre Zweck erfuellt. :-) Ich hoffe, ich habe in der Beschreibung keinen Denkfehler drin. Auf jeden Fall sollte es so in der Art funktionieren. Ich habe Daten schon oefter mal so zusammengefuehrt. Viele Gruesse Lutz
php::bar PHP Wiki - Listenarchive