Ankündigung

Einklappen
Keine Ankündigung bisher.

insert into table / aber mehrere daten

Einklappen

Neue Werbung 2019

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

  • insert into table / aber mehrere daten

    hallo. ich mach folgendes um einen table zu eroeffnen:

    PHP-Code:
    CREATE TABLE $newfile 
    (
    ID int NOT NULL AUTO_INCREMENT
    PRIMARY KEY(ID),
    url varchar(255),
    row1 varchar(255),
    row2 varchar(255),
    row3 varchar(255),
    row4 varchar(255),
    row5 varchar(255),
    row6 varchar(255),
    row7 varchar(255),
    row8 varchar(255)

    )
    "; 
    nun will ich mehrere daten da reinschaufeln aber ich weiss nciht (mehr) wie das geht?

    PHP-Code:
    $sql2="INSERT INTO $newfile (url, row1, row2, row3, row4, row5, row6, row7, row8) VALUES ('$row0','$row1','$row2','$row3','$row4','$row5','$row6','$row7','$row8')"
    damit kann ich wohl daten reinschieben aber immer nur jeweils eine zeile.
    ich hab aber mehrere zeilen wobei jede zeile wie man sieht eine ID hat.

    muss ich einfach am anfang noch die spalte ID dazunehmen und mysql springt dann automatisch dorthin und eroeffnet eine neue zeile wo ich die daten dafuer (in zeile 2) einfuegen kann?


  • #2
    Wie genau machst du das???

    CREATE TABLE $newfile ?

    newfile ist also eine variable oder was?

    http://dev.mysql.com/doc/refman/5.1/en/insert.html

    Kommentar


    • #3
      du kannst mehrere Values übergeben:

      MySQL 4.0.21 -> Mehrere Datensätze mit einem Insert Statement? - Relationale Datenbanksysteme @ tutorials.de: Forum, Tutorial, Anleitung, Schulung & Hilfe

      Kommentar


      • #4
        Da würde auch mich etwas beschäftigen. Bei mir bezieht INSERT INTO seine Daten aus Variablen, die widerum aus einer Tabelle (weil ich Rechnungen anstellen muss).

        Leider trägt Insert auch nur eine Zeile ein, aber nicht mehrere.
        Wenn ich aber ein FROM ransetze hinter der letzten Klammer von VALUES, erscheint ein Fehler. Außerdem liegt die Rechenvariable ja nicht in der Tabelle.

        PHP-Code:
            $eintrag "INSERT INTO ex_calc (stock_id, stockprice, sell, buy, kurstest, totalstocks) VALUES ($stock_id$stockprice$sell$buy$kurstest$totalstocks)";
            
        $eintragen mysql_query($eintrag);

            IF(
        $eintragen == true)
                {
                echo 
        "Erfolgreich";
                }
            ELSE
                {
                echo 
        "Fehler beim Speichern";
                } 
        Was muss da umgestellt werden.

        Kommentar


        • #5
          @peroja:
          damit kann ich wohl daten reinschieben aber immer nur jeweils eine zeile.
          ich hab aber mehrere zeilen wobei jede zeile wie man sieht eine ID hat.

          muss ich einfach am anfang noch die spalte ID dazunehmen und mysql springt dann automatisch dorthin und eroeffnet eine neue zeile wo ich die daten dafuer (in zeile 2) einfuegen kann?
          Arbeitest du mit phpmyadmin?
          Wenn du bei dem erstellen der Tabelle die Spalte "ID" zum Primärschlüssel machst (primarykey) und auf "autoincrement" (laufend steigend) setzt, kannst du dir bei der INSERT-Phrase das "ID" sparen (Er wird immer n+1 als ID vergeben).

          Falls du phpmyadmin nutzt kannst du das Ganze einfach über die Konfiguration der Spalten im UI steuern. Wenn nicht, brachst du in der CREATE-TABLE-Phase nur die richtigen Zusätze noch (näheres findest du in der Doku von mySQL).

          @krampi:
          Wenn ich aber ein FROM ransetze hinter der letzten Klammer von VALUES, erscheint ein Fehler. Außerdem liegt die Rechenvariable ja nicht in der Tabelle.
          Nach meinem Wissenstand geht das aus syntaktischen Gründen nicht.

          Ich bin jetzt nicht der mega-profi, aber ich INSERTe nach wie vor per Zeile (Einfach uns allein weil ich keine alternative kenne). Alleine das der Export von phpmyadmin alle Datensätze in einzelne Zeilen-INSERTs zerlegt lässt darauf schließen das es auch keine andere Möglichkeit gibt.

          Was ich euch aus strukturellen Gründen nahelegen kann ist den INSERT vorbereiten würde:
          1. Alle Daten fertig erbeben und ggf. damit rumrechnen
          2. Alle Daten die ihr in die DB eintragen wollt in einen Array speisen
          3. Per Schleife alle an die Datenbank schicken

          Falls Ihr bessere Alternativen kennt bitte PM oder hier gleich rein. Funktionieren tut es auf jeden fall auch so.

          Kommentar


          • #6
            Zitat von mumaha Beitrag anzeigen
            Ich bin jetzt nicht der mega-profi, aber ich INSERTe nach wie vor per Zeile (Einfach uns allein weil ich keine alternative kenne). Alleine das der Export von phpmyadmin alle Datensätze in einzelne Zeilen-INSERTs zerlegt lässt darauf schließen das es auch keine andere Möglichkeit gibt.
            Man kann natürlich per INSERT mehrere Zeilen auf einmal einfügen;
            und die Export-Funktion von PMA lässt einen auch auswählen, welche Form von INSERT man darin nutzen möchte.



            Zitat von krampi
            Wenn ich aber ein FROM ransetze hinter der letzten Klammer von VALUES, erscheint ein Fehler.
            Von ominösen Fehler zu reden, ohne die Meldung im Wortlaut zu benennen, ist keine brauchbare Art, Probleme zu beschreiben.

            Eine FROM-Klausel direkt im INSERT ist aber natürlich unsinnig, die hat da einfach nichts verloren.
            Es gibt allerdings eine INSERT ... SELECT Syntax, mit der man Werte, die eingefügt werden sollen, aus einer oder mehreren anderen Tabellen auslesen kann; siehe Manual.

            Kommentar


            • #7
              In meinem Code muss ein entscheidender Fehler stecken. Zwar erscheint keine Fehlermeldung, ich habe es auch unterbinden können, dass ein und derselbe Eintrag fünfmal pro Aufruf der Seite in die Tabelle ex_calc eingetragen wird, aber doch ist es nur eine Zeile, die in die besagte Tabelle geschrieben wird, trotz WHILE($row = mysql_fetch_array($result)){}. Dabei sollten es drei Zeilen sein.

              Nur kann ich mir jetzt langsam nicht mehr sagen, wo der Fehler liegt. Ich dachte, der Fehler sei behoben mit mysql_fetch_array.

              Um es so auszudrücken, ich gebe mich geschlagen, das ist irgendwie eine Nummer zu hoch.
              Wo mache ich den Fehler?

              PHP-Code:
              <?php


              mysql_connect
              ("...","...","...");
              mysql_select_db("...");

              $berechnung "SELECT ex_transfer.stock_id AS stock_id, ex_transfer.stockprice AS stockprice, SUM(IF(ex_transfer.Order=2,stockcount,0)) AS sell, SUM(IF(ex_transfer.Order=1,stockcount,0)) AS buy ".
                            
              "FROM ex_transfer ".
                            
              "GROUP BY ex_transfer.stockprice";

              $result mysql_query($berechnung) or die(mysql_error());
              WHILE(
              $row mysql_fetch_array($result)){

              $stock_id $row['stock_id'];
              $stockprice $row['stockprice'];
              $sell $row['sell'];
              $buy $row['buy'];
              $kurstest $row['buy']-$row['sell'];
              IF (
              $row['buy']>$row['sell']) {$totalstocks =  $row['sell'];} ELSE {$totalstocks =  $row['buy'];}


              }



                  
              $eintrag "INSERT INTO ex_calc (stock_id, stockprice, sell, buy, kurstest, totalstocks) VALUES ($stock_id$stockprice$sell$buy$kurstest$totalstocks)";
                  
              $eintragen mysql_query($eintrag);

                  IF(
              $eintragen == true)
                      {
                      echo 
              "Erfolgreich";
                      }
                  ELSE
                      {
                      echo 
              "Fehler beim Speichern";
                      }
                  echo 
              mysql_errno() . ": " mysql_error(). "\n";
              ?>
              Vielleicht habe ich Tomaten auf den Augen. Nur weiß ich nun nicht mehr weiter.

              Kommentar


              • #8
                Zitat von krampi Beitrag anzeigen
                aber doch ist es nur eine Zeile, die in die besagte Tabelle geschrieben wird, trotz WHILE($row = mysql_fetch_array($result)){}. Dabei sollten es drei Zeilen sein.
                Dein INSERT-Statement befindet sich aber gar nicht innerhalb der While-Schleife ...

                Wo mache ich den Fehler?
                Schon beim Schreiben des Codes - vernüftiges Einrücken entsprechend der Verschachtelungstiefe macht sowas sehr viel übersichtlicher.


                Und vielleicht wäre es ganz clever, wenn du deine höchstvermutlich realen Zugangsdaten mal aus dem gezeigten Code raus editierst ...

                Kommentar


                • #9
                  Zitat von ChrisB Beitrag anzeigen
                  Dein INSERT-Statement befindet sich aber gar nicht innerhalb der While-Schleife ...
                  ChrisB, vielen Dank. Du hast mir den Abend/die Nacht/den Morgen versüßt. Vielen herzlichen Dank. Das schreibe ich mir in mein Notizbüchlein.


                  Das mit dem Einrücken werde ich befolden und den Code habe ich entfernt.


                  Also, Chris, nochmals Dank. Jetzt werde ich es wohl endlich hinkriegen. Dieser Teil des Projekts war der wohl schwierigste und ich habe was gelernt.

                  Kommentar


                  • #10
                    Da Du mySQL benutzt, solltest Du INSERTs nicht in einer Schleife absetzen, sondern eine Multi-INSERT-Query zusammenbauen und diese einmalig absenden.

                    Kommentar


                    • #11
                      Aber das MIQ ist doch - wenn ich mir das so ansehe - auf fertige Ergebnisse ausgelegt.

                      Bei Projekt-Fertigstellung werden alle 5 Minuten neue Daten abgerufen und in eine Tabelle ex_calc eingefügt. Für eine manuelle Eingabe wäre dies dann doch etwas zu aufwendig.

                      Es sei denn, dass ich deinen Hinweis oder MIQ falsch verstanden habe.

                      Kommentar


                      • #12
                        Ich rede von Deiner obigen While-Schleife, in die (lat Thread) Deine Inserts kommen? Das ist Ressourcenverschwendung.

                        Kommentar

                        Lädt...
                        X