Logisches SQL Problem

  • Moin.
    Ich versuchs wie immer kurz zu halten:


    - nutze prepared statements (PDO)
    - will mehrere einträge in die tabelle schicken via simplen INSERT INTO db.table (col,col2) VALUES (1,2), (2,2) usw
    - nutze zwecks PDO platzhalter für die daten (platzhalter = 'a' ... platzhalter++)
    - `id` ist primary key


    Alles funktioniert, bis auf ON DUPLICATE KEY UPDATE.
    Um es zu verdeutlichen hier die query (gekürtzt):


    Und hier sieht man schon das Problem: ON DUPLICATE KEY UPDATE `name` = :name
    Da es mehrere Einträge sind kann ich kein `name` = :name angeben.
    Hab auch über INSERT IGNORE nachgedacht, aber das wäre wohl der falsche Weg.
    Auch eine "fake"-column wäre möglich, die dann eben immer auf NOW gesetzt wird, aber das ist auch nicht pro.


    hat jemand ne Idee wie man das lösen könnte?

  • Ich bin mir nicht sicher ob ich deine Absicht richtig verstehe, aber MySQL hat eine VALUES()-Funktion, die dir erlaubt auf die Werte des ursprünglichen Inserts zuzugreifen, falls kein duplicate key conflict auftreten würde. Sollte auch mit PDO funktionieren, denke ich.

  • VALUES hab ich ja versucht zu nutzen.
    Das Problem liegt aber darin, dass es bei
    ON DUPLICATE KEY UPDATE `name` = :name
    nicht einen `name`von den vielen Datensätzen nehmen soll, sondern immer den jeweiligen `name` des Satzes.


    Aber ich denke inzwischen, dass es nicht möglich ist.
    Daher nutze ich jetzt
    START TRANSACTION
    foreach(...)
    COMMIT


    Im Test war die verstrichene Zeit minimal höher.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!