SQL INSERT, UPDATE IF EXISTS ohne unique key

lordg2009

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.503
Hi,

ich habe folgende Tabelle

Code:
id (unique, autoincrement), date, opt, value

die id ist unique,
das Datum gibt den aktuellen Tag an,
opt, kann die Werte 1, 2, oder 3 annehmen,
value ist ein beliebig großer int

Ich möchte, dass am gleichen Tag (date), die zeile mit dem passenden opt-wert ein update erfährt, wenn valuegrößer ist, als in der Tabelle hinterlegt. Wenn es für den aktuellen Tag keinen datum gibt (wieder in bezug auf den passenden opt-wert), soll er eine neue zeile hinzufügen und als value den vom letzten verfügbaren Tag nehmen, minus 10%. Geht das in einem mySQL Befehl? INSERT ON DUPLICATE KEY wird nicht gehen, weil der Wert auf den es ankommt das datum in zusammenhang mit dem opt-wert ist.

Ist recht komplex, deshalb ein beispiel

iddateoptvalue
101.01.201712348
201.01.20172236
301.01.201735492
402.01.201712390
502.01.20172200
602.01.201736000

Beispiel 1: es ist der 02.01.2017.
Die Werte date=02.01.2017 opt=2 und value=500 werden übergeben
dann soll auf zeile fünf ein update erfolgen und value von 200 auf 500 angehoben werden

Beispiel 2: es ist der 02.01.2017
Die Werte date=02.01.2017 opt=3 und value=4076 werden übergeben
dann soll nichts passieren, weil in zeile 6 value bereits auf 6000 ist und 4076 kleiner ist

Beispiel 3: es ist der 03.01.2017
Die Werte date=03.01.2017 opt=2 und value=300 werden übergeben
dann soll eine neue zeile angelegt werden, da für den 03.01.2017 und opt=2 noch kein eintrag existiert,
id wird wegen auto_increment 7, opt=2 und value 300

Beispiel 4: es ist der 03.01.2017
Die Werte date=03.01.2017 opt=3 und value=4000 werden übergeben
dann soll eine neue zeile angelegt werden, da für den 03.01.2017 und opt=3 noch kein eintrag existiert,
allerdings ist 6000 - 10% 5400 und größer als 4000, daher sollen
id=7, opt=3 und value=5400 angelegt werden

Beispiel 5: es ist der 04.01.2017, am 03.01.2017 hat niemand die Anwendung benutzt
Die Werte date=04.01.2017 opt=3 und value=5300 werden übergeben
dann soll eine neue Zeile angelegt werden, da für den 04.01.2017 und opt=3 noch kein eintrag existiert,
allerdings sind 2 Tage vergangen, d.h. 6000 - 10% - 10% ist 4860 und 5300 ist größer, d.h.
id=7, opt=3 und value=5300

Hat jemand von euch die Fähigkeit, dass in eine Formel zu packen?
 
Ginge es nicht, einfach ein Unique Constraint auf (date, opt) zu packen? Dann würde ON DUPLICATE KEY UPDATE funktionieren.
 
date und pot sind für sich ja nicht unique, aber die mischung aus beidem

ich könnte allerdings ein MD5(CONCAT(date, opt)) UNIQUE machen
 
Zuletzt bearbeitet:
lordg2009 schrieb:
date und pot sind für sich ja nicht unique, aber die mischung aus beidem
Anscheinend hast Du NullPointers Antwort nicht ganz verstanden. Du kannst Keys über mehrere Spalten anlegen - also genau die von Dir benötigte "Mischung". Die Krücke mit MD5 ist völlig überflüssig.
 
Zurück
Oben