2010-04-26 15 views
144

में मेरे पास एक SQL क्वेरी है जहां मैं एकल क्वेरी में एकाधिक पंक्तियां डालना चाहता हूं। तो मैं कुछ इस तरह इस्तेमाल किया:एकाधिक क्वेरी के लिए MySQL ऑन डिप्लिकेट कुंजी अद्यतन एकल क्वेरी

$sql = "INSERT INTO beautiful (name, age) 
    VALUES 
    ('Helen', 24), 
    ('Katrina', 21), 
    ('Samia', 22), 
    ('Hui Ling', 25), 
    ('Yumie', 29)"; 

mysql_query($sql, $conn); 

समस्या है जब मैं इस क्वेरी निष्पादित, मैं उदाहरण के लिए कि क्या एक अद्वितीय कुंजी जाँच करने के लिए (जो प्राथमिक कुंजी नहीं है), चाहते हैं। उपरोक्त मामले में 'नाम', चेक किया जाना चाहिए और यदि ऐसा 'नाम' पहले से मौजूद है, तो संबंधित पूर्ण पंक्ति को अन्यथा डाला जाना चाहिए।

उदाहरण के लिए, उदाहरण के लिए, यदि 'कैटरीना' डेटाबेस में पहले से मौजूद है, तो पूरी पंक्ति, चाहे फ़ील्ड की संख्या को अद्यतन किया जाना चाहिए। फिर यदि 'समिया' मौजूद नहीं है, तो पंक्ति डाली जानी चाहिए।

मैं का उपयोग कर के बारे में सोचा:

INSERT INTO beautiful (name, age) 
     VALUES 
     ('Helen', 24), 
     ('Katrina', 21), 
     ('Samia', 22), 
     ('Hui Ling', 25), 
     ('Yumie', 29) ON DUPLICATE KEY UPDATE 

यहाँ जाल है। मैं फंस गया और भ्रमित हो गया कि कैसे आगे बढ़ना है। मेरे पास एक समय में सम्मिलित/अद्यतन करने के लिए कई पंक्तियां हैं I कृपया मुझे दिशा दें। धन्यवाद।

उत्तर

338

नए मानों को देखने के लिए कीवर्ड VALUES का उपयोग करें (documentation देखें)।

INSERT INTO beautiful (name, age) 
    VALUES 
    ('Helen', 24), 
    ('Katrina', 21), 
    ('Samia', 22), 
    ('Hui Ling', 25), 
    ('Yumie', 29) 
ON DUPLICATE KEY UPDATE 
    age = VALUES(age), 
    ... 
+6

धन्यवाद एक टन। यही वही है जो मैं चाहता हूं .... धन्यवाद ... – Prashant

+10

** सुंदर **, बिल्कुल मुझे क्या चाहिए। * हे, देखें कि मैंने वहां क्या किया? * –

+0

क्या होगा यदि हमें अद्यतन में एक आईएफ स्टेटमेंट शामिल करने की आवश्यकता है जिसमें प्रत्येक पंक्ति के लिए एक अलग स्थिति है? – logic

-1

आप INSERT के बजाय Replace का उपयोग कर सकते हैं ... डिप्लिकेट कुंजी अपडेट पर।

+16

हाँ, लेकिन नई पंक्ति डालने से पहले पुरानी पंक्ति को हटाकर पुरानी पंक्ति हटा दी जाती है। मैं प्राथमिक आईडी को बनाए रखने के लिए पुरानी पंक्ति को बरकरार रखना चाहता हूं। – Prashant

+2

मुझे एहसास नहीं हुआ कि पुराने पीके को बनाए रखना आपके लिए महत्वपूर्ण है ... निश्चित रूप से, इस मामले में रिपप्लेस काम नहीं करेगा ... – a1ex07

+0

यदि आपको पीके की परवाह नहीं है, तो मेरे मामले में, यह काम करता है पूरी तरह से। – MLeFevre

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