Ankündigung

Einklappen
Keine Ankündigung bisher.

DB-Tabelle 1:1 in neue DB übernehmen (über 2 links)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • DB-Tabelle 1:1 in neue DB übernehmen (über 2 links)

    Hallo Liebe PHP-Freunde,

    ich habe mich gerade eben neu registriert und das hier ist sozusagen mein erster Post.

    Ich bin Schüler an der Fachoberschule Technik mit dem Schwerpunkt Informatik und hab ein Projekt "Schulbuchausleihe" begonnen welches genaugenommen ( wie könnte es auch anders sein ) eine Webseite für das Verwalten von Lehrbuch Materialien ist. Das ganze ist ziemlich komplex muss ich zugeben, denn es umfasst zB. Barcode-Generierungen, PDF-Erstellungen für die Ausleihbestätigungen, Schüler-Verwaltung.
    (Werde es nach Fertigstellung zur Verfügung stellen & eine OnlineDemo schalten )

    Alles läuft bisher super, allerdings bekomme ich als langjähriger PHP-Programmierer eine gewisse Sache nicht so wirklich hin.
    Und nun kommen wir auch endlich zum eigentlichen Problem:


    Ich muss bei der Erstellung einer neuen DB ein paar Daten aus der alten DB übernehmen. Darum würde ich gerne über 2 link_identifiers die Daten von der einen Tabelle in die andere übernehmen.

    Wie müsste der folgende Befehl aussehen wenn man über 2 DB links geht?

    Code:
    CREATE TABLE Tabelle AS
    SELECT * FROM Tabelle
    //EDIT:
    Natürlich kann man das ganze auch auf folgendem Wege machen, allerdings habe ich dann das Problem das ich alle Datenfelder direkt angeben muss.
    Es kann aber durchaus passieren das sich an der DB-Struktur aus der "DB1" etwas ändert, die Struktur soll dann natürlich erhalten bleiben.

    Hat jemand eine Idee?
    PHP-Code:
    $abf mysql_query("SELECT feld, feld2 FROM Tabelle",$db1);
    while(
    $ergebnis=mysql_fetch_object($abf)){
            
    mysql_query("INSERT INTO Tabelle (feld, feld2) VALUES ('$ergebnis->feld','$ergebnis->feld2')",$db2);

    Danke im vorraus


  • #2
    CREATE TABLE legt nur die Tabelle an, erzeugt aber natürlich keine Datensätze.

    INSERT ... SELECT dürfte das sein, was du suchst.

    Kommentar


    • #3
      Wobei man sagen muss, dass er, wenn er eine leere DB hat auch die Tabellen zuerst erstellen musst, und da bleibt dir nicht wirklich was anderes übrig als mehr als nur eine DB-Abfrage zu machen ..?

      lg
      PHP-Code:
      if ( $humans >= ) {
         
      war ();

      Kommentar


      • #4
        Bau gleich eine Im-/Export Schnittstelle mit ein
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Zitat von ChrisB Beitrag anzeigen
          CREATE TABLE legt nur die Tabelle an, erzeugt aber natürlich keine Datensätze.

          INSERT ... SELECT dürfte das sein, was du suchst.
          Wobei man sagen muss, dass er, wenn er eine leere DB hat auch die Tabellen zuerst erstellen musst, und da bleibt dir nicht wirklich was anderes übrig als mehr als nur eine DB-Abfrage zu machen ..?
          Naja das stimmt so nicht ganz. MySQL erstellt automatisch die Tabelle und fügt auch die Datensätze an. Es geht nur um die jeweilige Tabellen-Struktur das diese übernommen wird, was ja durchaus geht. Allerdings will ich das ganze ja über 2 link identifiers machen und da habe ich eben keine Ahnung wie man das bewerkstelligen kann.

          Kommentar


          • #6
            Ich weiß weder, was
            Es kann aber durchaus passieren das sich an der DB-Struktur aus der "DB1" etwas ändert, die Struktur soll dann natürlich erhalten bleiben.
            bedeuten soll, noch, was Du mit Link identifiers meinst.
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Hi

              ich habe gerade mal schnell nachgeschaut, wie PHPMyAdmin die Aufgabe löst.

              Code:
              INSERT INTO `datenbank2`.`tabelle_kopie` 
              SELECT * 
              FROM `datenbank1`.`tabelle_original` ;
              Der in der Connection angegebene MySQL-User sollte natürlich Rechte für beide DBs haben.
              Es ist schon alles gesagt. Nur noch nicht von allen.

              Kommentar


              • #8
                Zitat von drsoong Beitrag anzeigen
                Hi

                ich habe gerade mal schnell nachgeschaut, wie PHPMyAdmin die Aufgabe löst.

                Code:
                INSERT INTO `datenbank2`.`tabelle_kopie` 
                SELECT * 
                FROM `datenbank1`.`tabelle_original` ;
                Der in der Connection angegebene MySQL-User sollte natürlich Rechte für beide DBs haben.
                Der Code erstellt aber keine Tabelle!

                --> SHOW CREATE TABLE `tabelle`;

                Kommentar


                • #9
                  Dafürmüssen dann aber beide Tabellen kompatibel sein.
                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    Dafürmüssen dann aber beide Tabellen kompatibel sein.
                    Hatte angenommen, das wäre auch so. Oder nehme ich da zu viel an?!

                    Der Code erstellt aber keine Tabelle!
                    Ja stimmt, mit der Schau-bei-PHPMyAdmin-nach-Methode kriegt man das aber auch direkt geliefert, wenn man eine Copy-Operation ausführt.
                    Es ist schon alles gesagt. Nur noch nicht von allen.

                    Kommentar


                    • #11
                      Keine Ahnung. Der TE erklärt ja nicht, was
                      Es kann aber durchaus passieren das sich an der DB-Struktur aus der "DB1" etwas ändert, die Struktur soll dann natürlich erhalten bleiben.
                      bedeutet.
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        so sry, gestern hatte ich leider keine Möglichkeit zurückschreiben.

                        Ich weiß weder, was
                        Es kann aber durchaus passieren das sich an der DB-Struktur aus der "DB1" etwas ändert, die Struktur soll dann natürlich erhalten bleiben.
                        bedeuten soll, noch, was Du
                        mit Link identifiers meinst.
                        Mal angenommen ich habe an der Struktur DB1.Benutzer etwas geändert (zusätzliches Datenfeld bspw.) dann will ich das auch in die neue Datenbank übernommen haben, inklusive aller Datensätze. Somit Kann ich also schonmal keinen Weg gehen, wo ich jedes einzelne Datenfeld mit angeben muss.

                        Link Identifiers benutzt man um mehrere Datenbanken auf einer Webseite zu verwenden.
                        PHP-Code:
                        // Verbindung zu den DB`s
                        $db1 mysql_connect('localhost','mysql_user','mysql_password');
                        $db2 mysql_connect('localhost','mysql_user','mysql_password',true);

                        // DB`s an den Link anhängen
                        mysql_select_db("datenbank1",$db1);
                        mysql_select_db("datenbank2",$db2);

                        // db1 & db2 als link identifiers in Verwendung (Wie ich es bisher kenne)

                        // Kleines Beispiel zur Veranschaulichung wie man es verwenden kann...
                        $abf mysql_query("SELECT * FROM Benutzer",$db1);
                        while(
                        $erg=mysql_fetch_object($abf)){
                        // mach was damit


                        Die Lösung von Drsoong bspw.
                        Code:
                        INSERT INTO `datenbank2`.`tabelle_kopie` 
                        SELECT * 
                        FROM `datenbank1`.`tabelle_original`;
                        wäre daher nicht gänzlich verkehrt, nur muss man dafür die Tabellen-Struktur vorher erkennen und anhand dessen, die neue Datenbank-Tabelle anlegen.

                        Mein bisheriger Vorschlag zum Beispiel machts direkt in einem Schwung
                        Erstellen der DB-Tabelle inkl. anhängen aller Datensätze:

                        Code:
                        CREATE TABLE Tabelle AS
                        SELECT * FROM Tabelle

                        Die Frage ist nun also wie man das über die $links machen kann. Hoffe ihr versteht nun etwas besser worauf ich hinaus will. Sollte es gar nicht anders gehen werde ich stumpf folgenden Code-Verwenden, indem ich mir die Namen der Datenbanken vorher als variable irgendwo deklariert habe. Aber das ist eigentlich ein unsauberer Weg weil sich die verwendeten Datenbanken auf der Webseite stehts ändern.

                        PHP-Code:
                        $datenbank1 "alt";
                        $datenbank2 "neu";

                        mysql_query('CREATE TABLE '.$datenbank2.'.Tabelle AS
                                    SELECT * FROM '
                        .$datenbank1.'.Tabelle',$db); 
                        Aber möglicherweise kennt ihr ja ne bessere Möglichkeit, dass man vll schon direkt mit den $links arbeiten kann. Und genau die würde ich gerne wissen!


                        Gruß

                        SystemSchocker

                        Kommentar


                        • #13
                          PHP-Code:
                          mysql_query('CREATE TABLE '.$datenbank2.'.Tabelle AS 
                                      SELECT * FROM '
                          .$datenbank1.'.Tabelle',$db); 
                          da sollte man vielleicht einmal nur so zur sicherheit, ich weiß ja nicht, wie deine DBs heißen, das ganze und `` setzten :
                          PHP-Code:
                          mysql_query('CREATE TABLE `'.$datenbank2.'`.`Tabelle` AS 
                                      SELECT * FROM `'
                          .$datenbank1.'`.`Tabelle`',$db); 
                          PHP-Code:
                          if ( $humans >= ) {
                             
                          war ();

                          Kommentar


                          • #14
                            CREATE TABLE Tabelle AS
                            SELECT * FROM Tabelle
                            Das ist doch Unfug. SELECT sektiert Werte und keine Felder. Feldnamen bekommt man über SHOW COLUMNS / EXPLAIN, SHOW CREATE TABLE wäre auch mal nen Blick wert. Dafür muss man aber mal ins Manual sehen! In phpmyadmin hättest DU auch schauen können, die die DB-Duplizierung funktioniert.

                            PHP kennt mysql_fetch_field, da kann man auch was mit bauen..

                            Aber das ist eigentlich ein unsauberer Weg weil sich die verwendeten Datenbanken auf der Webseite stehts ändern.
                            Eher solltest Du mal nachdenken, wie unsauber eine Applikation ist, deren DB-Schema sich ständig ändert. Irgendwas machst Du da falsch. Von daher ist die ganze Frage akademisch.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #15
                              Zitat von nikosch
                              Eher solltest Du mal nachdenken, wie unsauber eine Applikation ist, deren DB-Schema sich ständig ändert. Irgendwas machst Du da falsch. Von daher ist die ganze Frage akademisch.
                              Weil das Projekt der Schule übergeben wird und die Menschen dort eher wenig bzw. gar keine Ahnung von PHP haben und sicherlich net raussuchen wollen wo nochmal in welchem Script stand wie die Tabelle "buecher" erstellt wird und wie sie auszusehen hat, folgt eine stumpfe Kopie der bisheren Datenbank-Struktur inklusive dieser Datensätze.
                              Hat den Vorteil das via PHPmyadmin ne Änderung von denen vorgenommen werden kann und sich auf die nächsten Schuljahre automatisch auswirkt. ( Denn pro Schuljahr gibts eine neue DB)
                              Ansonsten müsste nämlich bei jeder Änderung wieder die Struktur der jeweilen Tabelle als "create_table_buecher.sql" oder dergleichen weggesichert bzw. aktualisiert werden, damit das Script auf diese zugreifen kann.

                              Aber das gehört eigentlich gar nicht zum Thema und bringt mich was die Ursprungsfrage betrifft eh nicht weiter.

                              Zitat von nikosch
                              PHP kennt mysql_fetch_field, da kann man auch was mit bauen..
                              Habs mir gerade angeschaut... darüber könnte man wirklich den $link mit einbeziehen und sauber abarbeiten, scheint allerdings eherlich gesagt ein bisschen overpowered für dieses Projekt zu sein. Dennoch gut zu wissen fürs nächste mal, Danke dir nikosch!

                              Zitat von PhillKill12
                              da sollte man vielleicht einmal nur so zur sicherheit, ich weiß ja nicht, wie deine DBs heißen, das ganze in `` setzten :

                              PHP-Code:
                              mysql_query('CREATE TABLE `'.$datenbank2.'`.`Tabelle` AS 
                                          SELECT * FROM `'
                              .$datenbank1.'`.`Tabelle`',$db); 
                              Durchaus ein guter Punkt. Vielen Dank dir für den Tipp

                              Ja, ich glaube mit den Links alleine komme ich als solches nicht weiter sondern muss stattdessen wirklich auf ausgeschriebene Bezeichnungen wie bspw. `Datenbank.Tabelle` zurückgreifen.
                              Hätte gedacht das es vielleicht doch eine solche Möglichkeit gibt.

                              Danke allen die sich dem Problem angeschlossen haben.
                              Thema kann geschlossen werden


                              Gruß

                              SystemSchocker

                              Kommentar

                              Lädt...
                              X