Ankündigung

Einklappen
Keine Ankündigung bisher.

[MYSQL] Insert mit mehreren ids

Einklappen

Neue Werbung 2019

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

  • [MYSQL] Insert mit mehreren ids

    Hallo,

    ich weis nicht wie ich es hätte anders nennen sollen.
    Ich habe ein Array wie folgt vorliegen:
    PHP-Code:
      array (size=3)   'installdate_service' => string '2020-04-21' (length=10)   'cms_service' => string 'Irgendwas' (length=14)   'cms_contracts_id' =>      array (size=3)       => string '1' (length=1)       => string '4' (length=1)       => string '6' (length=1
    wie müsste denn die Abfrage lauten, damit ich für jede ID das Datum und den Text in die Datenbank bekomme?
    Ich steh hier voll auf dem Schlauch, hab schon daran gedacht mir dementsprechend 3 Arrays mit jeweils den Werten zu bauen, aber vielleicht geht es ja einfacher.

    LG Maik

  • #2
    Bitte Tabellenstruktur und Beispieldaten als SQL-Code posten.

    Kommentar


    • #3
      Code:
      CREATE TABLE `cms_services` (
          `id` INT(11) NOT NULL AUTO_INCREMENT,
          `cms_contracts_id` INT(11) NOT NULL DEFAULT '0' COMMENT 'Vertrags-ID',
          `cms_service` VARCHAR(150) NOT NULL COMMENT 'Betroffener Service' COLLATE 'latin1_swedish_ci',
          `installdate_service` DATE NOT NULL COMMENT 'Datum der Handlung',
          `isnew` TINYINT(4) NOT NULL DEFAULT '1' COMMENT '1= ist neu; 0= wurde gesendet',
          PRIMARY KEY (`id`) USING BTREE
      )
      COMMENT='keiner'
      COLLATE='latin1_swedish_ci'
      ENGINE=MyISAM
      AUTO_INCREMENT=570
      ;
      Code:
      INSERT INTO `cms_services` (`id`, `cms_contracts_id`, `cms_service`, `installdate_service`, `isnew`) VALUES
          (1, 11, 'Backup', '2019-09-02', 0),
          (2, 10, 'Backup', '2019-09-02', 0),
          (3, 9, 'Backup', '2019-09-02', 0),
          (4, 14, 'Backup', '2019-09-02', 0),
          (5, 9, 'Sicherheitsaudit', '2019-09-02', 0),
          (6, 15, 'Backup', '2019-09-02', 0),
          (7, 4, 'Backup', '2019-09-03', 0),
          (8, 6, 'Backup', '2019-09-03', 0);
      Ist das so Ok?

      Kommentar


      • #4
        Ja. Und welches Ergebnis würdest du hier erwarten?

        Kommentar


        • #5
          Verstehe nicht. Das sind Beispieldaten und wie die Tabelle aufgebaut ist. Und das Array aus dem ersten Post muss in die DB.
          Ich habe demnach n-Anzahl an IDs und einmal Datum und einmal eine Leistung. Kann ich das irgendwie in die Tabelle bekommen ohne mir für jede ID
          ein Array mit Datum und Leistung zu basteln?

          Kommentar


          • #6
            Dein Array ist halt eine lange einzeilige Wurst mit Zeichensalat und nicht wirklich lesbar. Ist deine Erwartungshaltung, dass sich das unlesbare Zeug so jemand anschauen wird?

            Um Arrays zu exportieren sollte besser var_export() verwendet werden.

            Kommentar


            • #7
              Zitat von Zero2000 Beitrag anzeigen
              [CODE]CREATE TABLE `cms_services` (
              `id` INT(11) NOT NULL AUTO_INCREMENT,
              ..
              AUTO_INCREMENT=570
              ..

              Code:
              INSERT INTO `cms_services` (`id`, `cms_contracts_id`, `cms_service`, `installdate_service`, `isnew`) VALUES
              (1, 11, 'Backup', '2019-09-02', 0),
              ..
              Ist das so Ok?
              Nein, ein Autoincrement ist dazu da, keine ID angeben zu müssen. Die aus dem Bespiel steht bei 570, Du fügst ID beginnend mit 1 ein. Was soll dabei rauskommen?

              Kommentar


              • #8
                Code:
                array ( 'installdate_service' => '2020-04-22',
                'cms_service' => 'Irgendwas',
                'cms_contracts_id' => array ( 0 => '1', 1 => '4', 2 => '7', ), )
                Keine Ahnung ob es jetzt besser lesbar ist.

                Ich fasse nochmal zusammen.
                Ich sollte die Tabellenstruktur posten ... Check
                Ich sollte Beispieldaten posten ... Check
                Ich habe euch das Array gepostet welches so wie die Besispieldaten in der Tabelle, in die Tabelle soll ... Check
                Rechtschreibung und Grammatik ... Check

                Warum wird dann weiter gemeckert?

                Perry Staltic das sind nur Beispieldaten wie sie bisher in der DB stehen

                Kommentar


                • #9
                  PHP-Code:
                  $db = new PDO('mysql:host=localhost;dbname=test;charset=utf8''root''', [
                      
                  PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
                      
                  PDO::ATTR_EMULATE_PREPARES => false
                  ]);

                  // Erstellen einer Testdatenbank
                  $db->query("
                      CREATE TEMPORARY TABLE `cms_services` (
                          `id` INT(11) NOT NULL AUTO_INCREMENT,
                          `cms_contracts_id` INT(11) NOT NULL DEFAULT '0',
                          `cms_service` VARCHAR(150) NOT NULL,
                          `installdate_service` DATE NOT NULL,
                          `isnew` TINYINT(4) NOT NULL DEFAULT '1',
                          PRIMARY KEY (`id`)
                      )
                  "
                  );

                  $data = [
                      
                  'installdate_service' => '2020-04-22',
                      
                  'cms_service' => 'Irgendwas',
                      
                  'cms_contracts_id' => ['1''4''7']
                  ];

                  $stmt $db->prepare("
                      INSERT INTO `cms_services`
                          (`installdate_service`, `cms_service`, `cms_contracts_id`)
                      VALUES
                          (?, ?, ?)
                  "
                  );

                  foreach (
                  $data['cms_contracts_id'] as $contractsId) {
                      
                  $stmt->execute([
                          
                  $data['installdate_service'],
                          
                  $data['cms_service'],
                          
                  $contractsId
                      
                  ]);
                  }

                  // Testausgabe
                  $stmt $db->prepare("SELECT * FROM `cms_services`");
                  $stmt->execute();
                  print_r($stmt->fetchAll(PDO::FETCH_ASSOC)); 
                  Code:
                  Array
                  (
                      [0] => Array
                          (
                              [id] => 1
                              [cms_contracts_id] => 1
                              [cms_service] => Irgendwas
                              [installdate_service] => 2020-04-22
                              [isnew] => 1
                          )
                  
                      [1] => Array
                          (
                              [id] => 2
                              [cms_contracts_id] => 4
                              [cms_service] => Irgendwas
                              [installdate_service] => 2020-04-22
                              [isnew] => 1
                          )
                  
                      [2] => Array
                          (
                              [id] => 3
                              [cms_contracts_id] => 7
                              [cms_service] => Irgendwas
                              [installdate_service] => 2020-04-22
                              [isnew] => 1
                          )
                  
                  )

                  Kommentar


                  • #10
                    Vielen Dank für eure Hilfe und Mühe,
                    hab es vor 5 Minuten selbst mit einer foreach Schleife erledigt, dachte nur man könnte das irgendwie einfacher in die DB bringen.

                    Kommentar


                    • #11
                      Das ist doch einfach. Also das Beispiel aus 9, Wenn du es anders gelöst hast zeige das mal.

                      Kommentar

                      Lädt...
                      X