Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL Wordpress Multiple Inserts

Einklappen

Neue Werbung 2019

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

  • MySQL Wordpress Multiple Inserts

    Hallo liebe Community,

    ich würde gerne aktuell ein laufendes skript verbessern, welches doch sehr viel Zeit in Anspruch nimmt, was auf einer Menge Datenbankabfragen bzw Inserts zurück zu führen ist.
    Nach dem Daten ausgewertet worden sind wird in einer Schleife ein INSERT ausgeführt. Je nach Auslastung bei uns kann es mal bis zu 2000 Schleifendurchläufe kommen.

    Folgender INSERT wird ausgeführt
    PHP-Code:
    INSERT INTO table
    (idfulfillqtymarkesale)
    VALUES
    (12345)
    ON DUPLICATE KEY UPDATE fulfill 2qty 3marke 4sale 
    Klappt auch ohne Probleme.
    Jetzt würde ich gerne den Vorgang diesbezüglich beschleunigen.
    Hat dazu jemand eine Idee?

    Dass man Inserts auch nach dieser Logik abschicken kann ist mir bewusst:
    PHP-Code:
    INSERT INTO table_x (a,b,cVALUES (1,2,3), (4,5,6), (7,8,9
    Allerdings habe ich keine Ahnung wie ich da den "DUPLICATE KEY UPDATE"-Teil da mit anhänge.

    Vielleicht hat ja sonst jemand noch andere Ideen wie ich das darstellen kann.

    Vielen Dank im Voraus und Liebe Grüße

  • #2
    bekommst du denn irgendwelche Fehler, wenn du das einfach hinten ranhängst wie im ersten Beispiel? Oder was hast du ausprobiert?
    [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

    Kommentar


    • #3
      Zitat von chorn Beitrag anzeigen
      bekommst du denn irgendwelche Fehler, wenn du das einfach hinten ranhängst wie im ersten Beispiel? Oder was hast du ausprobiert?
      Danke für deine Antwort!

      Probiert habe ich folgendes:
      PHP-Code:
      INSERT INTO table
          
      (idfulfillqtymarkesale)
      VALUES
          
      (73588120'1,4'''ON DUPLICATE KEY UPDATE fulfill 1qty 20marke '1'sale '111',
          (
      73589120'1,4'''ON DUPLICATE KEY UPDATE fulfill 1qty 20marke '1'sale '222',
          (
      73590120'1,4'''ON DUPLICATE KEY UPDATE fulfill 1qty 20marke '1'sale '333' 
      Da gibt er mir einen Syntax Error

      Dann folgendes:
      PHP-Code:
      INSERT INTO table
          
      (idfulfillqtymarkesale)
      VALUES
          
      (73588120'1,4'''),
          (
      73589120'1,4'''),
          (
      73590120'1,4''')
      ON DUPLICATE KEY UPDATE
      fulfill 
      1qty 20marke '1'sale '111',
      fulfill 1qty 20marke '1'sale '222',
      fulfill 1qty 20marke '1'sale '333' 
      Da läuft er durch, aber wenn es die IDs 73588 - 73590 schon gibt, trägt er in der Spalte sale immer den Wert "333" ein. Heißt letztlich immer den letzten ON DUPLICATE KEY UPDATE - WERT.

      Demnach weiß ich nicht, wie es anders gehen soll ^^

      Kommentar


      • #4
        Du wirst wohl drei einzelne Abfragen machen müssen.

        Kommentar


        • #5
          Zitat von hellbringer Beitrag anzeigen
          Du wirst wohl drei einzelne Abfragen machen müssen.
          Danke für deine Antwort!
          Hast du denn vielleicht auch noch andere Ideen wie ich das dann beschleunigen kann anstatt 2000 mal einen Insert abzuschicken?

          Kommentar


          • #6
            Verwende eine Transaktion.

            Kommentar


            • #7
              Hi kannst du denn nicht bei der Datenauswertung bereits unterscheiden ob eine ID vorhanden oder nicht vorhanden ist? Denn dann könntest du erst alle "neuen" Einfügen und dann die übrigen bearbeiten.


              Du könntest aber auch mal folgendes probieren.
              PHP-Code:

              INSERT INTO table
                  
              (idfulfillqtymarkesale)
              VALUES
                  
              (73588120'1,4'''),
                  (
              73589120'1,4'''),
                  (
              73590120'1,4''')
              ON DUPLICATE KEY UPDATE
              fulfill 
              VALUES(fulfill), qty VALUES(qty), marke VALUES(marke), sale VALUES(sale

              Kommentar


              • #8
                Oder vielleicht kannst Du dies in ein ChronJob auslagern, unterteilt in mehreren Aufgaben.

                Kommentar


                • #9
                  #7 könnte klappen, hab das auch hier bei stackoverflow gefunden.

                  Edit: Grad mal getestet, funktioniert ohne Probleme. Merk ich mir. Bienchen für Tessa!

                  Kommentar


                  • #10
                    Vielen Dank schonmal für die Antworten

                    Zitat von TessaKavanagh Beitrag anzeigen
                    Hi kannst du denn nicht bei der Datenauswertung bereits unterscheiden ob eine ID vorhanden oder nicht vorhanden ist? Denn dann könntest du erst alle "neuen" Einfügen und dann die übrigen bearbeiten.
                    Danke für den Hinweis. Wäre natürlich auch eine Methode. Hatte einfach nur erwartet dass es einfacher geht, ohne mir jetzt unter Umständen 10000 Id's im Vorfeld ziehen zu müssen.

                    Zitat von TessaKavanagh Beitrag anzeigen
                    Du könntest aber auch mal folgendes probieren.

                    INSERT INTO table
                    (id, fulfill, qty, marke, sale)
                    VALUES
                    (73588, 1, 20, '1,4', ''),
                    (73589, 1, 20, '1,4', ''),
                    (73590, 1, 20, '1,4', '')
                    ON DUPLICATE KEY UPDATE
                    fulfill = VALUES(fulfill), qty = VALUES(qty), marke = VALUES(marke), sale = VALUES(sale)
                    Und Tada - Hieran sieht man das es einfacher geht.
                    Das ist echt Klasse! Vielen Dank. Toller Hinweis und dafür würde ich glatt einen Keks springen lassen ^^

                    Danke + Liebe Grüße

                    Kommentar


                    • #11
                      Aha, ich dachte, du möchtest etwas anderes machen. Denn bei #3 setzt du willkürlich irgendwelche Werte und das ist so mit dem letzten Code nicht möglich.

                      Kommentar


                      • #12
                        Möchte man beim ON DUPLICATE KEY UPDATE andere Werte als beim INSERT haben, dann kann man sich diese Werte aus einer Liste holen, deren Auswahl über die id gesteuert wird.
                        Beispiel:
                        Code:
                        INSERT INTO artikelorder
                          (id,artikelId,orderDate)
                        VALUES
                          (5,2,'2016-05-23'),
                          (6,2,'2016-05-24')
                        ON DUPLICATE KEY UPDATE
                          orderDate = ELT(id-4,'2016-06-01','2016-06-05')
                        Dieser Fall dürfte in der Praxis aber eher selten zur Anwendung kommen.

                        Kommentar

                        Lädt...
                        X