SQL Statement benötigt

Gerne und ich versuchs nochmal...


INSERT INTO testcase (userId, documentId, msg, documentAffiliation) VALUES (10,12,"SuccessfullFeedbackEvent","Testwert") ON DUPLICATE KEY UPDATE rate= (rate+1), favor = (IF((rate+1)=4),'true','') ;


Sag mir mal, was da jetzt rauskommt.


Achso und wenn du bei rate = 5 ein 'true' setzen willst, muss am Ende natürlich (rate+1)=5 stehen und nicht mehr (rate+1)=4

Habs nochmal auf einer anderen SQL Umgebung laufen lassen. hier bekomme ich zwar auch einen Fehler hier werden die Klammern nach dem IF hervorgehoben....
 
Werbung:
  1. Unerkanntes Schlüsselwort. (near "ON" at position 128)
  2. Unerkanntes Schlüsselwort. (near "DUPLICATE" at position 131)
  3. Unerkanntes Schlüsselwort. (near "KEY" at position 141)
Das klingt (gegoogelt) nach einem Fehler mit mysql bzw. im Zusammenhang mit der Tabelle/Datenbank. Müsstest du mal googeln oder die Tabellen ggf. prüfen
 
PostgreSQL und Java funktioniert, Du kannst auch JavaScript innerhalb PostgreSQL ausführen und einiges mehr. das t steht für 'true'.
 
Aaaaach komm.... :D Zeichensetzung is nicht so meins

INSERT INTO testcase (userId, documentId, msg, documentAffiliation) VALUES (10,12,"SuccessfullFeedbackEvent","Testwert") ON DUPLICATE KEY UPDATE rate= (rate+1), favor = (IF((rate+1)=4,'true','')) ;


Versuchs bitte nochmal :)
 
Aaaaach komm.... :D Zeichensetzung is nicht so meins

INSERT INTO testcase (userId, documentId, msg, documentAffiliation) VALUES (10,12,"SuccessfullFeedbackEvent","Testwert") ON DUPLICATE KEY UPDATE rate= (rate+1), favor = (IF((rate+1)=4,'true','')) ;


Versuchs bitte nochmal :)
Yuhuuu :) so geht es.. Hab noch ein Größerzeichen eingesetzt:
Code:
INSERT INTO testcase (userId, documentId, msg, documentAffiliation) VALUES (11,12,"SuccessfullFeedbackEvent","Testwert") ON DUPLICATE KEY UPDATE rate= (rate+1), favor = (IF((rate+1)>=4,"true",'')) ;

Ein Problem habe ich noch mit einem neuen Datensatz. Der wird korrekt angelegt hat aber Initial den Wert 0 bei rate. Kann ich hier nochmal ne Abfrage machen und nen default von 1 setzen bei neuen Datensätzen?
 
Mh habe es ein paar mal getestet und jetzt zählt er mir zwar die Rate hoch und auch der übertrag passt aber unabhängig vom den IDs. Heißt auch bei noch nicht existenten Kombinationen wird nur ein Datensatz hochgezählt.
 
Also wenn er keinen INSERT macht und immer nur das UPDATE müsstest du schätzungsweise nochmal deine Tabellenstruktur überprüfen. Bei mir in meinem Testszenario, werden beide Situationen (Update und Insert) soweit korrekt ausgeführt
 
Aber meine Keys sind doch schon korrekt gesetzt oder?
ALTER TABLE `testcase`
ADD PRIMARY KEY (`learnerId`),
ADD UNIQUE KEY `IDCombination` (`userId`,`documentId`) USING BTREE;
 
Mein SQL zur Tabelle sieht so aus:

CREATE TABLE `testcase` (
`learnerId` int(11) NOT NULL,
`userId` int(255) NOT NULL,
`documentId` int(255) NOT NULL,
`msg` varchar(255) NOT NULL,
`documentAffiliation` varchar(255) NOT NULL,
`rate` int(11) NOT NULL,
`favor` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
Habe nun das Statement in meine Java-Code übernommen. Kann eventuell einer hier mal drüber schauen? Ich glaube das ich irgendwo ein Komme etc. nicht richtig gesetzt habe...

Code:
stmt.executeUpdate("INSERT INTO testlearner (userId, documentId, message, documentAffiliation) VALUES (" + uId
                        + "," + dId + "," + msg + "," + dA
                        + ") ON DUPLICATE KEY UPDATE rate= (rate+1), favor = (IF((rate+1)=5," + "true" + ",'')");
 
Versuchs mal so:

stmt.executeUpdate("INSERT INTO testlearner (userId, documentId, message, documentAffiliation) VALUES (" + uId
+ "," + dId + ",'" + msg + "','" + dA
+ "') ON DUPLICATE KEY UPDATE rate= (rate+1), favor = (IF((rate+1)=5,'true','')");

Also:
- msg und dA müssen bei den values in Hochkommata gesetzt werden da String
- Das IF Statement in dem SQL Befehl kannst du genauso stehen lassen, wie das von mir gespostet wurde und muss nicht mit einem + Operator für eine Variable aufgesplittet werden (außer du möchtest hier in naher Zukunft eine Variable einsetzen und nicht mehr den festen Wert "true")
 
Werbung:
Leider immer noch nicht.. würde es gerne mal mit den "alten" Inputs probieren:

Code:
tmt.executeUpdate("INSERT INTO testlearner (userId, documentId, message, documentAffiliation) "
                    + "VALUES (10","12","'SuccessfullFeedbackEvent'","'true'")"ON DUPLICATE KEY UPDATE rate= (rate+1), favor = (IF((rate+1)=5,'true','')");

Passen die Kommas so`?
 
Zurück
Oben