WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Daten von einer SQL Tabelle in eine ander kopieren (http://www.wcm.at/forum/showthread.php?t=233872)

incubus 18.03.2009 07:53

Daten von einer SQL Tabelle in eine ander kopieren
 
Ich versuche gerade ein Forum zu konvertieren, hierzu möchte ich alle User und Beiträge ins neue Forum übertragen.
Die Userdaten habe ich einfach als .csv exportiert für die neue Tabelle umgestöpselt und wieder importiert.

Bei den Beiträgen geht das nicht, es sind zu viele, auch den Import bekomm ich im Excel nicht Fehlerfrei hin.

Ich möchte nun direkt in phpmyAdmin die Inhalte aus einer Tabellenspalte in eine andere Kopieren, geht das?
Ja? Wie?

Bitte, Danke !

zAPPEL 18.03.2009 08:02

Wenn beide Tabellen in der selben Datenbank sind müsste das (glaube ich) so funktionieren:
Insert into tabelle2 (spalte1, spalte2, spalte3) (select spalte2,spalte5,spalte3 from tabelle1)

incubus 18.03.2009 10:26

Ok Kopieren hab ich hinbekommen, aber hab ein neues Problem.

Ich hab so kopiert:

INSERT INTO `phpbb_posts_text`(`post_id`,`bbcode_uid`,`post_su bject`,`post_text`)
SELECT `forumpost_threadid`,`forumpost_bbcode`,`forumpost _title`,`forumpost_text`
FROM `phpkit_forumpost`

aber nun benötige ich eine Kopie, einer Spalte aus einer Tabelle die nach einer bestimmten Spalte sortiert ist, damit sich die Daten nicht vermischen...

Ich hab in der Qelltabelle_1 eine Spalte "Thread_id" und "Forum_id", in der Quelltabelle_2 "Thread_id" und "Post_id"

Die Quelltabellen sind wenn ich sie mir unter phpMyAdmin ansehe unterschiedlich sortiert, wenn ich die Daten aus den beiden Tabellen in eine "Zieltabelle" zusammenkopiere passen sie nicht mehr zueinander.

Meine Idee war nun einfach die erste, "Quelltabelle_1", nach dem selben Kriterium wie die zweite, "Quelltabelle_2" zu sortieren nämlich "Post_id"

Mit dieser Sortierung dann die Daten aus den beiden in meine Zieltabelle zu kopieren, so würden die Datensätze dann wieder passen.

Leider bekomme ich das mit dem Sortieren nicht hin, ich kann sie zwar sortieren aber die Einstellung bleibt nur solange ich mir die Tabelle ansehe, verlasse ich die Ansicht ist die Sortierung weg :(

Hilfe :heul:

incubus 18.03.2009 12:22

Ok, auch erledigt, aber neues Problem :mad:

Ich hab nun Daten in einer Tabelle, nun möchte ich EINE Spalte der tabelle mit den inhalten einer Spalte einer anderen Tabelle befüllen, habe das wie Folgt versucht:

INSERT INTO `phpbb_posts` (`forum_id`)
SELECT `forumthread_catid`
FROM `phpkit_forumthread`

Leider werden nicht nur die Daten Kopiert sondern es werden komplette neue Einträge angelegt, das funktioniert natürlich nicht.

Martin_H3G 18.03.2009 12:36

UPDATE Funktion verwenden mit entsprechenden SELECT

incubus 18.03.2009 19:00

Update war ein guter Tipp, hab mich nun 3 Stunden im google gequählt aber habs hinbekommen :)
Zur Erklärung:
( phpkit_forumcat = Quell-Tabell A)
( forumcat_postcount = Quell Spalte

( phpbb_forums = Ziel-Tabelle B)
( forum_posts = Ziel Spalte )

UPDATE `phpkit_forumcat`,`phpbb_forums`
SET `phpbb_forums`.`forum_posts`=`phpkit_forumcat`.`fo rumcat_postcount`
WHERE `phpbb_forums`.`forum_id`=`phpkit_forumcat`.`forum cat_id`

incubus 18.03.2009 20:48

okey einiges hab ich schon geschafft aber nun hab ich eine echte Aufgabe:

Die Quell-Tabelle hat folgende Spalten:

post_id / thread_id /

Viele Posts (post_id) sind einem Thread zugeteilt

In der Zieltabelle habe ich folgende Spalten:

thread_id / first_post_id / last_post_id

ich muss nun für jeden Thread (thread_id) den ersten und lezten Post (post_id) definieren.

Per Hand schaff ich das nicht, ~2000 Threads und 20.000 Beiträge, ich denke aber das es mit einer guten WHERE Anweisung klappen sollte, könnte mir bitte jemand helfen?

Yoghurt 18.03.2009 23:51

Probier mal...

Code:

UPDATE Zieltabelle SET first_post_id = SELECT MIN(QuellTabelle.post_id) FROM QuellTabelle WHERE QuellTabelle.thread_id = ZielTabelle.thread_id
 
UPDATE Zieltabelle SET last_post_id = SELECT MAX(QuellTabelle.post_id) FROM QuellTabelle WHERE QuellTabelle.thread_id = ZielTabelle.thread_id


incubus 19.03.2009 11:22

Danke !

ich hab einen syntaxfehler drinn und find ihn nicht...

Fehler

SQL-Befehl: http://mysqlsvr04admin.world4you.com...img/b_help.png
UPDATE "phpbb_topics" SET "phpbb_topics". "topic_first_post_id" = SELECT MIN( "phpkit_forumpost". "forumpost_id" )
FROM "phpkit_forumpost"
WHERE "phpkit_forumpost". "forumthread_id" = "phpbb_topic". "thread_id"

MySQL meldet: http://mysqlsvr04admin.world4you.com...img/b_help.png
#1064 - Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen (diese kann für verschiedene Server-Versionen unterschiedlich sein) bei '"phpbb_topics"

SET "phpbb_topics"."topic_first_post_id" = SELECT MIN'in Zeile 1

_____________________________

Habs auch so probiert:
UPDATE "phpkit_forumpost","phpbb_topics"
SET "phpbb_topics"."topic_first_post_id" = SELECT "phpkit_forumpost"."forumpost_id" MIN("phpkit_forumpost"."forumpost_id")
FROM "phpkit_forumpost"
WHERE "phpkit_forumpost"."forumthread_id"="phpbb_topic". "thread_id"

Und So:

UPDATE "phpkit_forumpost","phpbb_topics"
SET "phpbb_topics"."topic_first_post_id" = SELECT "phpkit_forumpost"."forumpost_id", MIN("phpkit_forumpost"."forumpost_id")
FROM "phpkit_forumpost"
WHERE "phpkit_forumpost"."forumthread_id"="phpbb_topic". "thread_id"




__________________________________

Yoghurt 19.03.2009 18:03

Falls du auf einer mySQL Datenbank arbeitest musst du glaub ich das SELECT in extra Klammern setzen. Also so...

Code:

UPDATE "phpbb_topics" SET "phpbb_topics". "topic_first_post_id" = (SELECT MIN( "phpkit_forumpost". "forumpost_id" )
FROM "phpkit_forumpost"
WHERE "phpkit_forumpost". "forumthread_id" = "phpbb_topic". "thread_id")



Alle Zeitangaben in WEZ +2. Es ist jetzt 01:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag