Forum > Userids und Übertrag aus anderer DB
DOTLAN Intranet / Portal >> Allgemeines > Userids und Übertrag aus anderer DB |
Antwort erstellen |
Autor | Thema: Userids und Übertrag aus anderer DB | ||||
|
|
||||
NEW Clan: Mitten aus Deutschland e.V. Postings: 438 |
Hi, ich habe folgende Problemstellung: Ich habe 2 Dotlansysteme in denen LANs eingestellt sind. System 1. ist aktiv mit 1 LAN hat user und Teilnehmer im System. System 2. das gleiche. ich will jetzt die User und Teilnehmereinträge aus System 2 in System 1 übertragen und einem Event zuordnen. Jetzt ist die Frage, wie mache ich das mit den Userids, dass sich da nichts überschneidet. Soll ich die einfach extrem hoch setzen, dass die sich nicht überschneiden und dann einfach in die DB von System 1 eintragen? |
||||
|
|
||||
NEW Clan: CCA Postings: 58 |
Tjo, das wird so einfach nicht möglich sein. Da würdest du ein Script (feature Request) brauchen, dass die neun User aus dem 2. System bei den Usern im 1. System anhängt, und dann alle User IDs in den restlichen Daten die übertragen werden korrigiert. Wenn du jedoch _nur_ die User übertragen möchtest gäbe es da eine alternative: Du müsstest ein Backup der "user"-Tabelle aud der Datenbank des 2. Systems ohne DROP TABLE Option machen. Z.b. mit phpMyAdmin. Anschliessend müsstest du noch die sql-datei überprüfen, dass bei den INSERT-befehlern die ID nicht drin steht. Wenn ja, musst du sowohl das `id` löschen als auch den ersten eintrag jeder VALUE-Zeile. Dann kannst du die SQL-Datei im 1. System importieren. Die User sollten dann automatisch eine "neue" id bekommen. Dann würde ich noch doppelten Usern suchen: SELECT nick,email,COUNT() AS count FROM user WHERE count > 1 GROUP BY email und SELECT nick,email,COUNT() AS count FROM user WHERE count > 1 GROUP BY nick COUNT() giebt an wie oft der es die gleihe email bzw. user giebt. den eintrage müsstest du dir dann per hand raus suchen und löschen. Die zuordnung zu den events müsstest du dann noch per hand machen. Bzw. es müsste auch über einen SQL-query mit INSTERT SELECT gehen. Aber darüber mache ich mit erst gedanken wenn du dir ganz sicher bist, dass du das so machen möchtest. PS: das ganze ist ungetestet, und ich weis nicht ob und wie gut es funktionieren wird. an deiner stelle würde ich das ganze mal in eienr 2. datenbank testen. [Editiert von kritzi am 06.Mar.2006 um 10:25] |
||||
|
|
||||
NEW Clan: Mitten aus Deutschland e.V. Postings: 438 |
ich hab mir das ganze so gedacht: wenn er die userids mit auto_increment vergibt, dann gucke cih einfach nach der höchsten userid in DB1 und rechne in DB2 per UPDATE user SET id + x einfach so viel zu den userids und teilnehmerids dazu (x ist ein fester wert, der dann alle Beziehungen beibehöt) und dann kopier ich das aus DB2 in DB1 und muss nurnoch händisch die Eventid zuordnen |
||||
|
|
||||
NEW Clan: CCA Postings: 58 |
ich hab mir das jetzt noch mal genauer angeschaut, und ich glaube jetzt habe ich eine gute lösung gefunden: du fügst in der DB1 eine spalte mit dem namen old_id hinzu: ALTER TABLE `user` ADD `old_id` INT( 11 ) AFTER `id`; dann exportierst du die daten der DB2 über phpMyAdmin mit folgenden einstellungen: [_] Strukutr (nicht ausgewählt !) [x] Daten [x] Vollständige 'INSERT's [x] Erweiterte 'INSERT's das ergebnis sollte ungefär so aussehen: INSERT INTO `user` (`id`, `nick`, `passwort`, ...) VALUES (1, 'kritzi', 'xxx', ...), (2, 'user', 'xxx', ...), ... jetzt änderst du `id` in `old_id` und importierst das ganze jetzt in die DB1 die id wird nun automatisch mit dem auto_increment eingefuügt. so wie du es vor hast würd ich es nicht machen weil ich mir nicht sicher bin, ob der auto_increment wert sich erhöht wenn du die id beim importieren vorgiebst. das köntne dazu führen, dass der nächste user mit der id angelegt werden sollte die du bereits durch deinen import belegt hast, was dann eventuell zu einer fehlermeldung führen könnte. wenn du es so machst wie ich es eben vorgeschlagen habe hättest du dann sogar auch die möglichkeit die anderen daten aus der DB2 herüber zu synchronisieren. durch die old_id hättest du die möglichkeit die verweis_ids von user.old_id auf user.id umzuschreiben um dann die daten mit selbigem auto_increment-trick von der DB2 in die DB1 zu überspielen. ich bin übrigends selber gerade erstaunt was man mit mysql ohne php(synchronisierungs-scrip) so alles anstellen kann |
||||
|
|
||||
NEW Clan: Mitten aus Deutschland e.V. Postings: 438 |
*ggg* hehe siehste mal. aber die Idee iss ganz gut. und old_id kann ich danach ja wieder abschiessen [Editiert von DerMega am 06.Mar.2006 um 14:01] |
||||
|
|
||||
NEW Clan: Mitten aus Deutschland e.V. Postings: 438 |
Feedback: danke deine Idee hat spitzenmäßig funktioniert. Man muss nur die SQL Exporte etwas anpassen und nachdem man alles in der DB hat das hier ausführen:
Eventid desshalb, damit man nicht versehentlich Datensätze bearbeitet die unbeteiligt sind. Ich hab natürlich die Eventid vor dem Import im SQL Export bearbeitet. EDIT: jez hhab ich natürlich in der DB2 md5 und in der DB1 wegen lansurfer import mysql_password Verschlüsselung Hat da einer ne Idee, wie ich das löse? Oder muss ich jedem ein neues Passwort zuschicken? Achso @ kritzi SELECT nick,email, COUNT(*) AS `count` FROM user WHERE `count` > 1 GROUP BY nick funktioniert nicht. Da sagt er unknown column count in WHERE clause [Editiert von DerMega am 06.Mar.2006 um 16:39] |
||||
[ Antwort erstellen ] |