आप डेटा सिंक्रनाइज़ेशन समस्या के लिए स्वयं को सेट अप कर रहे हैं। चूंकि लीड्स टेबल में पंक्तियां डाली जाती हैं, अपडेट की जाती हैं या हटा दी जाती हैं, आपको कर्मचारियों को अपडेट करने की आवश्यकता होती है। LeadCount कॉलम लगातार।
सबसे अच्छा समाधान लीडकाउंट कॉलम को स्टोर नहीं करना होगा, लेकिन एसक्यूएल समेकित क्वेरी के साथ लीड की गिनती को पुन: गणना करें क्योंकि आपको मूल्य की आवश्यकता है। इस तरह यह हमेशा सही होगा।
SELECT employeeID, COUNT(leadId) AS LeadCount
FROM Leads
GROUP BY employeeID;
अन्य समाधान सम्मिलित करें, अद्यतन के लिए नेतृत्व की मेज पर चलाता बनाने के लिए, और DELETE, ताकि आप Employees.LeadCount स्तंभ वर्तमान हर समय रहते हैं। उदाहरण के लिए, का उपयोग कर MySQL ट्रिगर वाक्य रचना:
CREATE TRIGGER leadIns AFTER INSERT ON Leads
FOR EACH ROW BEGIN
UPDATE Employees SET LeadCount = LeadCount + 1 WHERE employeeID = NEW.employeeID;
END
CREATE TRIGGER leadIns AFTER UPDATE ON Leads
FOR EACH ROW BEGIN
UPDATE Employees SET LeadCount = LeadCount - 1 WHERE employeeID = OLD.employeeID;
UPDATE Employees SET LeadCount = LeadCount + 1 WHERE employeeID = NEW.employeeID;
END
CREATE TRIGGER leadIns AFTER DELETE ON Leads
FOR EACH ROW BEGIN
UPDATE Employees SET LeadCount = LeadCount - 1 WHERE employeeID = OLD.employeeID;
END
एक अन्य विकल्प है, अगर आप MySQL का उपयोग कर रहे, बहु तालिका अद्यतन सिंटैक्स का उपयोग करने के लिए है। यह एसक्यूएल के लिए एक MySQL एक्सटेंशन है, यह आरडीबीएमएस के अन्य ब्रांडों के लिए पोर्टेबल नहीं है। सबसे पहले, सभी पंक्तियों में लीडकाउंट को शून्य पर रीसेट करें, फिर लीड्स टेबल में शामिल हों और शामिल होने वाली प्रत्येक पंक्ति में लीडकाउंट बढ़ाएं।
UPDATE Employees SET LeadCount = 0;
UPDATE Employees AS e JOIN Leads AS l USING (employeeID)
SET e.LeadCount = e.LeadCount+1;
स्रोत
2008-09-26 00:26:29
राशि (EmployeeID) कोई मतलब नहीं है, और एक ही मूल्य के आसपास अलग हमेशा समान मान प्रदान करेंगे, तो यह बेमानी है। –
आईआईआरसी जो वास्तव में धीमा होगा (MySQL मैंने जो भी उपयोग किया है) – BCS