MySQL-Insert-Trigger: Vor der Ausführung auf doppelte Einträge prüfen

348
Jan

Ich habe einen Trigger, der das "Kopieren" von Einträgen aus meiner Datenbank des Home Assistant (Home Automation Software) in eine andere Tabelle in einer anderen DB ausführt. Der Home Assistant speichert Einträge in einer Tabelle mit dem Namen "States". Wenn es einen neuen Eintrag für die entity_id meines Nokia (Withings) WLAN-Bereichs gibt, möchte ich seine Werte in meine "Health" -Tabelle in der DB "Home" kopieren. So weit, so gut, es funktioniert mit diesem Trigger:

BEGIN IF new.entity_id = '[my_wifi_scale]' THEN INSERT INTO my_db.health (user, datetime, metric, val1, val2) VALUES ('[my_username]', new.last_changed, 'weight', new.state, JSON_EXTRACT(new.attributes, '$.fat_ratio')); END IF; END 

Nun möchte ich prüfen, ob der neue Eintrag bereits existiert. Der Home Assistant empfängt die Werte regelmäßig und kümmert sich nicht darum, ob die Daten redundant sind.

Wie kann ich den Auslöser so ändern, dass er den Wert nur in meine "Health" -Tabelle einfügt, wenn sich die Felder "user", "val1" und "val2" vom vorherigen Eintrag unterscheiden? Es ist mir egal, ob die Tabelle des Auslösers ("Zustände" des Home Assistant) oder meine eigene ("Gesundheit") geprüft wird.

Ich habe zwar versucht, Einschränkungen in meine "Gesundheitstabelle" einzufügen, dies entspricht jedoch nicht den anderen darin gespeicherten Werten, wie beispielsweise Blutdruckwerten, die sich häufiger wiederholen. Deshalb suche ich nach einer Änderung des Abzugs.

Irgendwelche Ideen?

Danke / Grüße

1
WENN (SELECT COUNT (*) FROM Gesundheit WO Benutzer = NEW.user UND val1 = NEW.val1 UND val2 = NEW.val2) = 0 THEN` Akina vor 5 Jahren 0
@ Akina: Danke! Funktioniert gut! Jan vor 5 Jahren 0

0 Antworten auf die Frage