MySQL इन्सर्ट ट्रिगर: निष्पादित करने से पहले डुप्लिकेट प्रविष्टियों की जाँच करना


1

मुझे अपने होम असिस्टेंट (होम ऑटोमेशन सॉफ्टवेयर) डेटाबेस से "डीबी" की प्रविष्टियों को ट्रिगर करने वाली एक अन्य डीबी में दूसरी टेबल पर एक ट्रिगर मिला है। होम असिस्टेंट "स्टेट्स" नामक तालिका में प्रविष्टियों को संग्रहीत करता है। अगर मेरे Nokia (Withings) wifi स्केल की एंट्री_आईडी के लिए एक नई प्रविष्टि है, तो मैं इसे "DB" होम में "स्वास्थ्य" टेबल पर मानों को कॉपी करना चाहता हूं। अब तक, बहुत अच्छा, यह इस ट्रिगर का उपयोग करके काम कर रहा है:

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

अब मैं जांचना चाहूंगा कि क्या नई प्रविष्टि पहले से मौजूद है। होम असिस्टेंट नियमित रूप से मान प्राप्त कर रहा है और अगर डेटा बेमानी है तो परवाह नहीं करता है।

मैं ट्रिगर को कैसे बदल सकता हूं ताकि यह केवल मेरे "स्वास्थ्य" तालिका में मूल्य सम्मिलित करता है यदि फ़ील्ड "उपयोगकर्ता", "वैल 1" और "वैल 2" पिछले प्रविष्टि से भिन्न हैं? मुझे परवाह नहीं है अगर यह ट्रिगर की मेज (होम असिस्टेंट के "स्टेट्स") या मेरे अपने ("हेल्थ") की जांच करता है।

मैंने अपने "स्वास्थ्य" तालिका में बाधाओं को जोड़ने की कोशिश की, लेकिन यह इसमें संग्रहीत अन्य मूल्यों का अनुपालन नहीं करता है, उदाहरण के लिए रक्तचाप मान, जो दोहराए जाने की अधिक संभावना है। इसलिए मैं ट्रिगर में बदलाव की तलाश कर रहा हूं।

कोई विचार?

सादर धन्यवाद।


IF (SELECT COUNT(*) FROM health WHERE user=NEW.user AND val1=NEW.val1 AND val2=NEW.val2) = 0 THEN
अकिना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.