Ankündigung

Einklappen
Keine Ankündigung bisher.

INSERT mit Values und subselect

Einklappen

Neue Werbung 2019

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

  • INSERT mit Values und subselect

    Hallo,
    ich bin gerade auf der Suche nach einem Beispiel bei dem Werte in eine Tabelle geschrieben werden wobei ein Wert erst noch aus einer anderen Tabelle ermittelt werden muss.

    Bis jetzt sah ich nur Beispiele in der Form
    Code:
    INSERTINTO qa_costpriceslog (item_code, invoice_code, item_costprice)SELECT/* Literal number values with column aliases */1AS item_code,2AS invoice_code, item_costprice FROM qa_items WHERE item_code =1;
    bei mir würde das so ungefähr aussehen

    Folgende Daten sind für den Insert vorhanden
    $_POST['containerNr']
    $_POST['containerName']
    $_POST['roomTypeId']

    die roomId muss in der Tabelle room erst noch mit Hilfe der roomTypeId ermittelt werden.



    Code:
    INSERT INTO container (containerNr, containerName, roomid)
    select
    roomid
    from room WHERE roomTypeId = "'.$_POST['roomTypeId'].'";
    ich weiss jetzt nicht an welcher Stelle ich die $_POST Values setzen muss

    Grüße Jürgen


  • #2
    PHP-Code:
    $sqlQuery "INSERT INTO `container` ( `containerNr`, `containerName`, `roomid` ) SELECT " $containerNr ", '" $containerName "', `roomid` FROM `room` WHERE `roomTypeId` = " $roomTypeId
    POST-Daten bitte zunächst filtern, daher die Variablen-Namen...

    Kommentar


    • #3
      Hallo,
      ok Danke für die Lösung... muss jedoch aus Verständnisgründen etwas nachfragen.

      Mysql erkennt also in dem SELECT des Insert-Statements automatisch, was die vorhandenen Values sind und welche gesucht werden?
      sorry, ich kann es nur so doof beschreiben bzw. erfragen.
      denn betrachte ich den SELECT einzeln
      Code:
       SELECT " . $containerNr . ", '" . $containerName . "', `roomid` FROM....
      so würde das ja gar nicht funktionieren

      ich hätte eigentlich etwas in der Form vermutet
      Code:
      sqlQuery = "INSERT INTO `container` ( `containerNr`, `containerName`, `roomId` )VALUES ( '" .$containerNr . "', '" . $containerName . "', SELECT roomId from room WHERE roomTypeId = " . $roomTypeId .");
      Grüße Jürgen

      Kommentar


      • #4
        Anstatt INSERT INTO VALUES kannst Du halt auch INSERT INTO SELECT nutzen.
        Ich muß allerdings gestehen, daß ich mir grad nicht sicher bin, ob MySQL das so auch akzeptiert.
        Nutze das auf dem MSSQL-Server.

        Kommentar


        • #5
          Mysql erkennt also in dem SELECT des Insert-Statements automatisch, was die vorhandenen Values sind und welche gesucht werden?
          Strings müssen als solche erkennbar sein und INTs kann man nicht mit Spaltennamen verwechseln.

          Ich muß allerdings gestehen, daß ich mir grad nicht sicher bin, ob MySQL das so auch akzeptiert.
          tut es.

          Kommentar


          • #6
            Zitat von selfmade01 Beitrag anzeigen
            Mysql erkennt also in dem SELECT des Insert-Statements automatisch, was die vorhandenen Values sind und welche gesucht werden?
            sorry, ich kann es nur so doof beschreiben bzw. erfragen.
            Nein, da verlangst du zuviel von der (MySQL)DB. Dein Subselect muss genau so viele Spalten in der richtigen Reihefolge liefern, wie du Felder im INSERT hast.
            Und die Daten sollten vom Typ passen.

            Edit: Eine ähnliche Frage hatten wir unlängst hier Daten aus 4 Tabellen, count() im subselect

            Kommentar

            Lädt...
            X