Natascha: Probleme bei INSERT INTO , Mysql

ich möchte mehrere Zellen aus einer Tabelle in eine andere Tabelle kopieren. Mit einer Zelle klappt es

INSERT INTO tabelle1 (titel) SELECT (titel) FROM tabelle2

doch wenn ich zwei nehme,

INSERT INTO tabelle1 (titel,inhalt) SELECT (titel,inhalt) FROM tabelle2

klappt es eben nicht und aus der Beschreibung werde ich ehrlich gesgat nicht ganz klug. Kann mir dabei jemand helfen?

Natascha

  1. Hallo

    klappt nicht

    heisst genau was? "klappt nicht" ist keine vernuenftige Problembeschreibung.

    [ ] Du bekommst eine Fehlermeldung
    [ ] Du bekommst keine Fehlermeldung, die Daten stehen jedoch nicht in der Tabelle *

    Und welche Beschreibung meinst du?

    * evt eine entsprechende Fehlerbehandlung implementieren?

    Ciao, Frank

    1. In meinem Script bekomme ich keine Fehlermeldung, nur es wird auch nichts ausgeführt. Wenn ich es diregdn ausführe, über phpmyadmin, dann bekomme ich

      Operand should contain 1 column(s)

      und das verstehe ich nicht. Auch wenn ich ir das durchlese:

      http://dev.mysql.com/doc/refman/5.1/de/row-subqueries.html

      1. Hi!

        In meinem Script bekomme ich keine Fehlermeldung, nur es wird auch nichts ausgeführt.

        Dann ist dein Script mangelhaft, weil es nicht auf Fehler reagiert.

        Wenn ich es diregdn ausführe, über phpmyadmin, dann bekomme ich
        Operand should contain 1 column(s)
        und das verstehe ich nicht.

        Bei einem SELECT werden die Felder nicht geklammert.

        Auch wenn ich ir das durchlese:
        http://dev.mysql.com/doc/refman/5.1/de/row-subqueries.html

        Bei einem INSERT ... SELECT ... ist das SELECT keine Subquery.

        Lo!

        1. Ich verstehe leider nur Bahnhof.
          Kannst du mir es vieleicht noch ein wenig erklären?

          Ichhabe das hier gefunden:

          echo mysql_errno(),"<br>", mysql_error();

          laut erklärung muss es hinter dem mysql Befehl stehen um den Fehler auszugeben, was es auch macht. Kann ich es nicht irgendwie an den Anfang stellen, so das jeder Fehler ausgegben wird?

          1. Hi!

            echo mysql_errno(),"<br>", mysql_error();
            laut erklärung muss es hinter dem mysql Befehl stehen um den Fehler auszugeben, was es auch macht. Kann ich es nicht irgendwie an den Anfang stellen, so das jeder Fehler ausgegben wird?

            Nein, MySQL-Fehler sind immer stumm. Ihr Wortlaut muss mit den genannten Funktionen abgefragt werden, wenn einer auftritt. Dass ein Fehler vorliegt, sieht man jedenfalls am Rückgabewert der Funktionen (mysql_query() etc.), den man auswerten und nicht einfach ignorieren sollte. Es ist nicht sinnvoll, die Fehlermeldungen einfach nur auszugeben, sondern sich zu überlegen, was im Fehlerfall passieren soll - und zwar aus Anwendersicht. Wie kommt der Anwender am Ende doch noch zu seinem Ziel? Gibt es Alternativen, wenn die Datenbank grad mal nicht will?

            Lo!

            1. Interessant, wenn man also mit sagen wir mal 3 Abfragen hintereinander arbeitet. Müsste man sie dann jedesmal so etwa abfragen?

              1. Datenbankabfrage

              if OK dann weiter

              2.Datenbankabfrage

              if OK dann weiter

              3.Datenbankabfrage

              if OK dann FERTIG

              else
                     ->ENDE

              else
                 ->ENDE

              else
              ->ENDE

              Hi!

              echo mysql_errno(),"<br>", mysql_error();
              laut erklärung muss es hinter dem mysql Befehl stehen um den Fehler auszugeben, was es auch macht. Kann ich es nicht irgendwie an den Anfang stellen, so das jeder Fehler ausgegben wird?

              Nein, MySQL-Fehler sind immer stumm. Ihr Wortlaut muss mit den genannten Funktionen abgefragt werden, wenn einer auftritt. Dass ein Fehler vorliegt, sieht man jedenfalls am Rückgabewert der Funktionen (mysql_query() etc.), den man auswerten und nicht einfach ignorieren sollte. Es ist nicht sinnvoll, die Fehlermeldungen einfach nur auszugeben, sondern sich zu überlegen, was im Fehlerfall passieren soll - und zwar aus Anwendersicht. Wie kommt der Anwender am Ende doch noch zu seinem Ziel? Gibt es Alternativen, wenn die Datenbank grad mal nicht will?

              Lo!

              1. Hi!

                Interessant, wenn man also mit sagen wir mal 3 Abfragen hintereinander arbeitet. Müsste man sie dann jedesmal so etwa abfragen?

                Das gleiche Szenario mit der if-Verschachtlung hast du bereits mit einer Abfrage, denn da sind schon drei Funktionen enthalten, die alle Fehler liefern können: mysql_connect(), mysql_select_db(), mysql_query(). Mit mysqli wird es nur um einen Schritt einfacher, weil da das Auswählen der Datenbank beim Connect erfolgen kann. Allerdings kann es da auch noch komplexer werden, wenn man Prepared Statements verwendet.

                1. Datenbankabfrage
                     if OK dann weiter
                     2.Datenbankabfrage
                         if OK dann weiter
                         3.Datenbankabfrage
                         if OK dann FERTIG

                Wenn man nur dreimal Query ohne Connect betrachtet, ist jedoch die Frage, ob eine Verschachtlung in der Form fachlich sinnvoll ist. Wenn die weiteren Abfragen von der vorhergehenden abhängig ist, dann ja. Wenn es egal ist, ob eine misslingt, muss man das natürlich nicht so schachteln, sondern kann es in gleicher Verschachtlungsebene ausführen. (Diese Ebene natürlich unterhalb der Connect/Select-DB-Ebenen angesiedelt, denn davon ist ja jede Query abhängig).

                Sieht aufwendig aus? Ja, wenn man robuste Programme schreiben will, die auf alle möglichen Fehlerzustände Rücksicht nehmen kann der Code zur Fehlerbehandlung sehr leicht mehr werden als der Code, der für die reine fachliche Funktionalität benötigt wird.

                Lo!

        2. Bei einem SELECT werden die Felder nicht geklammert.

          Danke