Hilfe bei Datenbank Konvertierung benötigt!

psifactory

Erfahrenes Mitglied
Hallo,

folgendes Problem. Ich habe eine Datenbank mit Usern (~500). Dort ist nach IDs deren Username aufgeschlüsselt. In einer anderen Tabelle habe ich die nur die IDs stehen und müsste die nun dynamisch mit dem passenden Usernamen austauschen.

Das ganze schaut in etwa so aus:

tabelle_user

ID | USERNAME | ......


tabelle_daten

TEXT_ID | USERID | USERNAME |

In der USERNAME stehen jetzt leider die IDs drin..


Das ganze ist mir durch einen schlechten Koverter passiert als ich von einem PhpBB welches als Komponente in Joomla integriert war auf ein Simpleboard konvertieren wollte. Das ganze war eh ne reine Glückssache dass es geklappt hat mit dem Konvertieren. (zumindest zum Teil) .. Bin leider in Php nicht gerade fit, komm aber mit etwas Hilfe denke ich schon zum Ziel.. Wär also super wenn mir hier jemand helfen könnte.


Danke schon mal im Vorraus!

Sebastian


Edit:

Hab mir das ganze jetzt mal so überlegt.

Da ich in der Schule gerade etwas mit C++ mache versuchs ich es mal so..

Also ich brauch erst eine Zählschleife die 500 mal eine if auf das Db feld USERNAME macht und falls die Id mit der Id aus der tabelle_daten übereinstimmt den Namen ersetzt..

Allerdings hab ich um ehrlich zu sein keine Ahnung wie ich das in Php umsetzen soll.. Wurde erst letzte Woche mit C++ und Zeigern überrannt!
 
Zuletzt bearbeitet:
Deine Frage gehört in das SQL Forum!

Aber ich will dir helfen.
Wenn ich dein Problem richtig verstehe, dann steht in der Spalte bzw unter dem Attribut Username in der Relation (respektive der Tabelle) "tabelle_daten" die ID deines Users?

Dann komme ich zu dem gedanken, dass in deiner Tabelle "tabelle_Daten" keine spalte Username existieren muss, das wären redundante daten - wieso sollte in tabelle_user und in tabelle_daten der Name gespeichert werden----> es reicht aus das in tabelle_user zu speichern und über userID den namen aus der zweiten tabelle zu fischen.

Nun aber zu deinem Problem
Führe einfach folgenden sqlbefehl aus
"UPDATE tabelle_daten SET USERID=USERNAME;"

Damit setzt du für jede Zeile in deiner Tabelle die User ID gleich dem zugewiesenen Usernamen.
Danach löscht du einfach die Spalte Username....

MfG
 
Nein ist leider glaube ich nicht so einfach. Im moment sieht das ganze leider so aus:

http://portal.fightclubsw.de/index.php?option=com_joomlaboard&Itemid=30&func=showcat&catid=1

Du siehst ja dort steht geschrieben von 121 o.ä. In der Tabelle aus welcher die Daten kommen gibt es eine Spalte Name. Aber in dieser stehen die UserIDs. Allerdings ist auch eine Spalte ID vorhanden wo ebenfalls die IDs stehen. Also müsste ich irgendwie die IDs dort mit den Namen ersetzen damit das ausgegeben wieder passt.

Entschuldigung nochmal wegen des Falschpostes. War ja am Anfang auch mehr auf Programmieren fixiert. Wäre eigentlich super wenn es da direkt einen SQL Befehl gäbe mit dem man das ganze synchronisieren könnte.
 
Du willst in der Relation tabelle_daten in der Spalte username die namen der User haben, statt der ID?
Wenn das so ist, warum willst du beim auslesen nicht einfach den Namen aus der zweiten Tabelle auslesen?

Zeig mal deinen SELECT Befehl um das Board auszulesen....
 
Ganz genau das will ich machen. Ich habe eine Tabelle _sb_users in welcher die Namen im Feld Name stehen und diese nach id aufgeschlüsselt sind. Und ich habe die Tabelle _sb_messages in welcher beim Konvertieren statt Namen in das Feld Name die IDs gekommen sind.

Hier der Query:

database->setQuery("SELECT id, catid,name from #__sb_messages WHERE time=$lastPosttime and hold='0' and moved!='1' LIMIT 1");

Hoffe das ist der richtige. Denke aber schon.
 
mal angenommen deine Tabelle mit den usern heisst "tabelle_user", dann sähe der Code wie folgt aus:

database->setQuery("SELECT id, catid,name, username #__sb_messages JOIN tabelle_user ON from=userid WHERE time=$lastPosttime and hold='0' and moved!='1' LIMIT 1");

Das heisst temporär wird eine neue Tabelle erzeugt, die noch eine SPalte mehr hat, nämlich dein Username.
Falls deine usertabelle andersheisst, schreibe die entsprechende tabelle beim FROM rein und die entsprechenden SPalte beim ON from = ....!

MfG
 
klappt leider nicht. Hab eben noch mal geschaut ist definitv der einzige Query wo der Username aus der sb__message abgefragt wird.

$database->setQuery("SELECT id, catid,username from #__sb_messages JOIN #__users ON from=id WHERE time=$lastPosttime and hold='0' and moved!='1' LIMIT 1");


Eine Frage.. wäre es nicht vielleicht sinnvoller die Tabelle abzugleichen? Ich weis nicht wieviel Aufwand das wäre aber es wäre dann ursachenbekämpfung.. Kann man in SQL auch schleifen und Verzweigungen machen oder läuft das dann über php?

Hab dir noch nen Screenshot hochgeladen dass verstehst wie ich es meine!
 

Anhänge

  • _users.JPG
    _users.JPG
    25,8 KB · Aufrufe: 11
  • sb_messages.JPG
    sb_messages.JPG
    39 KB · Aufrufe: 10
Zuletzt bearbeitet:
einfach folgende query ausführen:

Diese ersetzt die ID mit dem Usernamen


UPDATE tabelle_daten AS a LEFT JOIN tabelle_user AS b ON (b.ID= a.USERNAME) SET a.USERNAME = b.USERNAME

Gruß
 
Zurück