Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten in Datenbank kopieren

Einklappen

Neue Werbung 2019

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

  • Daten in Datenbank kopieren

    Hallo,

    ich versuche Daten aus einer Datenbanktabelle in eine andere Datenbanktabelle zu kopieren.
    Wenn ich folgenden Code in PhpMyAdmin direkt im SQL-Tab eingebe funktioniert es:

    Code:
    CREATE TEMPORARY TABLE tmp SELECT * FROM beispiel;
    UPDATE tmp SET id = null;
    INSERT INTO beispiel2 SELECT * FROM tmp;
    Wenn ich dann das ganze versuche in einer PHP-Datei zu verpacken, funktioniert es leider nicht...

    PHP-Code:
    require("../db6.inc.php");

    mysqli_query($db6"CREATE TEMPORARY TABLE tmp SELECT * FROM beispiel;
      UPDATE tmp SET id = null;
      INSERT INTO beispiel2 SELECT * FROM tmp;"
    );

    mysqli_close($db6); 
    Der Zugriff auf die DB (hier in der Datei db6.inc.php) funktioniert, jedenfalls in einer anderen PHP-Datei.

    Kann mir jemand sagen was hier falsch ist oder was ich ändern muss?

    Gruß
    Sascha

  • #2
    Zitat von saschaw Beitrag anzeigen
    Kann mir jemand sagen was hier falsch ist oder was ich ändern muss?
    in mysqli_query() darf nur ein Query stehen, du musst deine drei Querys getrennt voneinander abschicken (also dreimal mysqli_query()).

    Kommentar


    • #3
      es ginge auch in EINEM Query. Man muß es nur richtig machen. Dazu gehört, auf "select *" zu verzichten. Würde die unsinnige Erstellung einer temp. Tabelle, das Update dieser, dem zweiten Insert, und damit Schreiblast vermeiden.
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Zitat von tk1234 Beitrag anzeigen
        in mysqli_query() darf nur ein Query stehen, du musst deine drei Querys getrennt voneinander abschicken (also dreimal mysqli_query()).
        Das funktioniert schon mal

        Und dann kommen wir auch schon zu meinem nächsten Problem.
        Die beispiel2-Tabelle liegt in einer anderen Datenbank. Ich habe jetzt folgenden Code, der leider nicht mehr funktioniert:

        PHP-Code:
        require("../inc/db6.inc.php");
        require(
        "../inc/db62.inc.php");

        mysqli_query($db6"CREATE TEMPORARY TABLE tmp SELECT * FROM beispiel");
        mysqli_query($db6"UPDATE tmp SET id = null");
        mysqli_query($db62"INSERT INTO beispiel2 SELECT * FROM tmp;");

        mysqli_close($db6);
        mysqli_close($db62); 
        Wie stelle ich es jetzt an, dass im 3. Query in die "DB62" geschrieben wird, aber aus "DB6" gelesen wird?
        Evtl. benötige ich jetzt ja gar nicht den Umweg über die Temporary Table tmp?

        Kommentar


        • #5
          Zitat von saschaw Beitrag anzeigen
          Wie stelle ich es jetzt an, dass im 3. Query in die "DB62" geschrieben wird, aber aus "DB6" gelesen wird?
          Indem du vor dem Tabellennamen noch die Datenbank angibst (»datenbank.tabelle«) - geht aber nur wenn der Benutzer bei beiden Datenbanken Rechte hat.

          Evtl. benötige ich jetzt ja gar nicht den Umweg über die Temporary Table tmp?
          Nein, hast du auch vorher nicht gebraucht wie akretschmer in #3 schon völlig richtig angemerkt hat.

          Kommentar


          • #6
            Hallo,

            verstehe ich das richtig, muss es dann so aussehen:

            PHP-Code:
            require("../inc/db6.inc.php");
            require(
            "../inc/db62.inc.php");

            mysqli_query($db6"CREATE TEMPORARY TABLE tmp SELECT * FROM beispiel");
            mysqli_query($db6"UPDATE tmp SET id = null");
            mysqli_query($db62"INSERT INTO db62.beispiel2 SELECT * FROM db6.tmp;");

            mysqli_close($db6);
            mysqli_close($db62); 
            Die tmp-Tabelle liegt doch bei mir in der Datenbank db6? Oder sehe ich das falsch?

            Wie kann ich denn kopieren ohne über den Umweg über die tmp-Tabelle?

            VG
            Sascha

            Kommentar


            • #7
              Zitat von saschaw Beitrag anzeigen
              verstehe ich das richtig, muss es dann so aussehen:
              Nein, alles muss natürlich über die gleiche Verbindungskennung laufen (bei dir $db6 oder $db62).

              Wie kann ich denn kopieren ohne über den Umweg über die tmp-Tabelle?
              Indem du das machst was man immer machen sollte: »SELECT *« durch »SELECT« gefolgt von der Liste der Spalten ersetzen, die Spalte die auf NULL gesetzt werden soll (id) dabei durch »NULL« ersetzen.

              Kommentar


              • #8
                Ich habe jetzt mal folgendes probiert:

                PHP-Code:
                require("../inc/db6.inc.php");
                require(
                "../inc/db62.inc.php");

                $abc "INSERT INTO dbname2.beispiel2 (wert1, wert2) SELECT wert1, wert2 FROM dbname.beispiel";

                $db62->query($abc) or die($db62->error); 
                Das funktioniert jetzt.

                Was ich noch nicht verstanden habe, ist das mit der id die auf NULL gesetzt werden soll.
                Im obigen Beispiel, habe ich die id komplett weg gelassen, da
                1. die id aus beispiel nicht in der beispiel2 übernommen werden muss
                2. die Tabelle beispiel2 die id selbstständig vergibt

                Wenn ich das Beispiel jetzt so abändere:
                PHP-Code:
                require("../inc/db6.inc.php");
                require(
                "../inc/db62.inc.php");

                $abc "INSERT INTO dbname2.beispiel2 (id, wert1, wert2) SELECT id=NULL, wert1, wert2 FROM dbname.beispiel";

                $db62->query($abc) or die($db62->error); 
                funktioniert es auch.
                Muss ich das so machen, oder geht auch das erste Beispiel?

                Kommentar


                • #9
                  Das erste Beispiel geht auch.
                  Du zeigst hier ja nur das Insert, beim Insert müssen nicht alle Spalten angegeben und somit gefüllt werden. Je nach Default-Einstellung der Spalte kann dort auch ein Wert vorgegeben sein, dieser kann NULL sein muss aber nicht. Ich empfehle dir, dass du dich mal tiefer mit dem Erstellen von Tabellen und SQL beschäftigst.

                  Kommentar


                  • #10
                    saschaw: Bitte zukünftig PHP-Tags für PHP-Code verwenden, danke!
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar


                    • #11
                      Zitat von Arne Drews Beitrag anzeigen
                      saschaw: Bitte zukünftig PHP-Tags für PHP-Code verwenden, danke!
                      Werde ich tun, Danke für die Anpassungen.

                      Kommentar


                      • #12
                        Hallo,
                        muss hier nochmal nachfragen, folgenden Code habe ich, funktioniert auch, wenn die beiden Datenbanken auf dem gleichen Server liegen:

                        PHP-Code:
                        require("../inc/db6.inc.php");
                        require(
                        "../inc/db62.inc.php");

                        $abc "INSERT INTO dbname2.beispiel2 (id, wert1, wert2) SELECT id=NULL, wert1, wert2 FROM dbname.beispiel";

                        $db62->query($abc) or die($db62->error); 
                        Liegen die beiden Datenbanken auf verschiedenen Server gehts nicht mehr. Die beiden Server liegen im gleichen Netzwerk.
                        In der db6 ist der Zugriff auf ServerA, in db62 der Zugriff auf ServerB. Ich kann von ServerA auf ServerB zugreifen, das funktioniert. Wenn ich das obige Beispiel ausführe bekomme ich eine Fehlermeldung, dass es die Datenbank dbname nicht gibt. Was ja eigentlich auch stimmt, da die Query auf db62 geht und dort nur die dbname2 liegt ...

                        Muss ich jetzt evtl. doch den Umweg über die Temp-Tabelle gehen (siehe oben)? Oder wie stelle ich es an?

                        VG Sascha

                        Kommentar


                        • #13
                          Hat sich erledigt, es funktioniert natürlich. Ich hatte lediglich keine Verbindung zu meinem entfernten Server.

                          Kommentar

                          Lädt...
                          X