2010-01-31 21 views
10

मैं एक रेटिंग प्रणाली के निर्माण कर रहा हूँ, और मैं, एक नई पंक्ति सम्मिलित करना चाहते हैं name क्षेत्र नहीं है पहले से ही शामिल name मैं सम्मिलित करना चाहते हैं, और अगर यह मौजूद है, मैं चाहता हूँ उदाहरण के लिए 1MySQL सम्मिलित

द्वारा count क्षेत्र बढ़ाने के लिए, अगर मैं एक पंक्ति name 'टॉम' है और मैं name 'टॉम के साथ एक और पंक्ति सम्मिलित करने का प्रयास करें, तो मैं पंक्ति पर क्षेत्र count के लिए +1 करना चाहते हैं कि पहले से ही मौजूद है।

name 'टॉम' के साथ एक पंक्ति में मौजूद नहीं है, तो मैं एक नया एक सम्मिलित करना चाहते हैं और 1.

मैं मैं के बारे में 3 SQL कथन और कुछ if बयानों के साथ ऐसा कर सकता है पता करने के लिए count निर्धारित करते हैं, लेकिन यह स्क्रिप्ट को धीमा कर देगा क्योंकि 2/3 वर्ग कमांड निष्पादित किए जा रहे हैं।

कोई विचार? धन्यवाद!

उत्तर

12

INSERT ... ON DUPLICATE KEY UPDATE

आप पर नकली चाबी अद्यतन निर्दिष्ट करते हैं देखते हैं, और एक पंक्ति सम्मिलित किया जाता है कि एक अद्वितीय सूचकांक या प्राथमिक कुंजी में एक डुप्लिकेट मान का कारण होता है, पुराने पंक्ति का एक अद्यतन किया जाता है।

उदा।

INSERT INTO table (name,counter) VALUES ('Bob', 1) 
    ON DUPLICATE KEY UPDATE counter=counter+1 
+0

हम्म, यह काफी काम नहीं करता है - हालांकि कोई त्रुटि नहीं है। क्या मैं उस फ़ील्ड को निर्दिष्ट कर सकता हूं जिसे इसे "डिप्लिकेट" करना चाहिए? – tarnfeld

+0

क्रमबद्ध, मैंने इसे तालिका के प्राथमिक कुंजी में जोड़ा: डी – tarnfeld

+0

प्राथमिक कुंजी नहीं है। एक अनूठी कुंजी पर्याप्तता (हालांकि प्राथमिक हमेशा अनूठी होती है) – VolkerK

संबंधित मुद्दे