Menü

Login

Aktuelle Version

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
DerMega
06.03.2006 um 09:32 QuoteProfileSend PM
NEW

Clan: Mitten aus Deutschland e.V.
Postings: 438

Megaaaaa
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?
 
kritzi
06.03.2006 um 10:23 QuoteProfileSend PM
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]
 
DerMega
06.03.2006 um 10:46 QuoteProfileSend PM
NEW

Clan: Mitten aus Deutschland e.V.
Postings: 438

Megaaaaa
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
 
kritzi
06.03.2006 um 12:34 QuoteProfileSend PM
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
 
DerMega
06.03.2006 um 14:01 QuoteProfileSend PM
NEW

Clan: Mitten aus Deutschland e.V.
Postings: 438

Megaaaaa
*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]
 
DerMega
06.03.2006 um 15:54 QuoteProfileSend PM
NEW

Clan: Mitten aus Deutschland e.V.
Postings: 438

Megaaaaa
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:

Code:
UPDATE event_teilnehmer AS e,
user AS u SET e.user_id = u.id WHERE u.id_old = e.user_id AND e.event_id =Eventid


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 ]