MySQL Insert Trigger: ตรวจสอบรายการที่ซ้ำกันก่อนดำเนินการ


1

ฉันมีทริกเกอร์ที่เรียกใช้รายการ "คัดลอก" จากฐานข้อมูล Home Assistant (ซอฟต์แวร์ระบบอัตโนมัติในบ้าน) ของฉันไปยังตารางอื่นในฐานข้อมูลอื่น ผู้ช่วยที่บ้านจะเก็บข้อมูลในตารางที่เรียกว่า "สถานะ" หากมีรายการใหม่สำหรับ entity_id ของมาตราส่วน wifi ของ Nokia (Withings) ของฉันฉันต้องการคัดลอกค่าไปยังตาราง "health" ใน DB "home" จนถึงตอนนี้ดีมากมันใช้งานทริกเกอร์นี้:

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

ตอนนี้ฉันต้องการตรวจสอบว่ามีรายการใหม่อยู่แล้ว ผู้ช่วยที่บ้านได้รับค่าอย่างสม่ำเสมอและไม่สนใจว่าข้อมูลซ้ำซ้อน

ฉันจะเปลี่ยนทริกเกอร์เพื่อให้แทรกค่าลงในตาราง "สุขภาพ" ของฉันได้อย่างไรหากฟิลด์ "ผู้ใช้", "val1" และ "val2" แตกต่างจากรายการก่อนหน้า ฉันไม่สนใจว่าจะตรวจสอบตารางของทริกเกอร์ ("ผู้ช่วยที่บ้าน" ของบ้าน) หรือของฉันเอง ("สุขภาพ")

ฉันลองเพิ่มข้อ จำกัด ลงในตาราง "สุขภาพ" ของฉัน แต่สิ่งนี้ไม่สอดคล้องกับค่าอื่น ๆ ที่เก็บไว้ในนั้นเช่นค่าความดันโลหิตซึ่งมีแนวโน้มที่จะทำซ้ำ ดังนั้นฉันกำลังมองหาการเปลี่ยนแปลงทริกเกอร์

ความคิดใด ๆ

ขอขอบคุณและขอแสดงความนับถือ.


IF (SELECT COUNT(*) FROM health WHERE user=NEW.user AND val1=NEW.val1 AND val2=NEW.val2) = 0 THEN
Akina
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.