[sql] Update on duplicate voor meerdere kolommen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Rixard
  • Registratie: September 2000
  • Laatst online: 18-07 13:28
Ik heb de volgende tabel:

id (primary key)systeem(key)tijd(key)waarde
112012-12-28 21:40:0010
212012-12-28 21:41:0080
312012-12-28 21:42:0080
422012-12-28 21:40:00900
522012-12-28 21:41:001000
...


Om de zoveel minuten haal ik de waarden van de afgelopen tijd. Deze periode kan echter de periode in de tabel overlappen, wat tot dubbele waarden leidt voor dezelfde tijd :/ .

Wanneer de combinatie van 'systeem' en 'tijd' al voorkomen, dan hoeft 'waarde' alleen geüpdatet te worden.

Eenvoudig dacht ik 8) .. Iets met ON DUPLICATE KEY UPDATE... Maar helaas, kom er niet uit.


Wat heb ik geprobeerd:

code:
1
2
3
4
5
INSERT INTO 
data (systeem,tijd,waarde) 
VALUES 
('1','2012-12-28 21:40:00','10') 
ON DUPLICATE KEY UPDATE systeem='1', tijd='2012-12-28 21:40:00',waarde='10';


en


code:
1
2
3
REPLACE INTO 
data (systeem,tijd,waarde) 
VALUES ('1','2012-12-28 21:40:00','10');


Ik denk dat het niet goed gaat, omdat de primary key wel telkens verschilt, maar die wil ik eigenlijk uitsluiten.

Uiteraard kan ik eerst een query draaien waarin gecheckt wordt of er al een waarde voor het systeem/tijd aanwezig is, maar heb moet vast in 1 query kunnen.

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 16:17

orf

Heb je wel een Unique index op de twee kolommen?

Acties:
  • 0 Henk 'm!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
code:
1
2
3
4
5
INSERT INTO 
data (systeem,tijd,waarde) 
VALUES 
('1','2012-12-28 21:40:00','10') 
ON DUPLICATE KEY UPDATE waarde='10';
http://dev.mysql.com/doc/.../insert-on-duplicate.html
Zoals hierboven al aangegeven, je moet ook een unieke index op die 2 kolommen plaatsen. Verder moet je de waarden in de kolommen welke in je unieke index zitten, ook niet opnieuw te overschrijven. Dus enkel je 'waarde' kolom moet je in je 'ON DUPLICATE KEY' statement zetten.

[ Voor 7% gewijzigd door kluyze op 28-12-2012 22:59 ]


Acties:
  • 0 Henk 'm!

  • Rixard
  • Registratie: September 2000
  • Laatst online: 18-07 13:28
Het is opgelost.

Er zat inderdaad geen Unique index op beide kolommen. Ook heb ik de aanpassing van kluyze doorgevoerd.

Bedankt.