2011-09-21 11 views
35

मैं इस आदेश के साथ एक दो-स्तंभ तालिका में कुछ शब्द डालने हूँ:मैं MySQL में एकाधिक डाली गई पंक्तियों की आईडी कैसे प्राप्त करूं?

INSERT IGNORE INTO terms (term) VALUES ('word1'), ('word2'), ('word3'); 
  1. मैं पंक्ति जिसमें प्रत्येक शब्द डाला जाता है की आईडी (प्राथमिक कुंजी) कैसे प्राप्त कर सकते हैं। मेरा मतलब है INSERT निष्पादित करने के बाद "55,56,57" जैसे मान को वापस करना। क्या MySQL की प्रतिक्रिया है?

  2. शब्द कॉलम UNIQUE है। यदि कोई शब्द पहले से मौजूद है, तो MySQL इसे सम्मिलित नहीं करेगा। क्या इस डुप्लिकेशन के संदर्भ को वापस करना संभव है (यानी पंक्ति की आईडी जिसमें शब्द मौजूद है)? एक प्रतिक्रिया "55, , 56" जैसी प्रतिक्रिया।

उत्तर

35
  1. आप इसे SELECT LAST_INSERT_ID(); के माध्यम से या (जो भी भाषा में) कॉल mysql_insert_id() अपने ढांचे/MySQL पुस्तकालय होने के माध्यम से मिलता है।

  2. यह काम नहीं करेगा। वहां आपको डालने के बाद आईडी पूछना होगा।

+5

1. यह ओपी शो जैसे बहु-पंक्ति सम्मिलन के लिए काम नहीं करेगा। सही उत्तर के लिए – ceejayoz

+0

+1। : डी – brenjt

+2

दाएं - 'इंसर्ट इग्नोर' के साथ एक में नहीं। लेकिन एक गैर-हस्ताक्षरकर्ता में, यह आपको पहला मूल्य उत्पन्न और डाला जाता है। – glglgl

3

क्यों नहीं बस:

SELECT ID 
    FROM terms 
WHERE term IN ('word1', 'word2', 'word3') 
+0

वह उन शब्दों को लाएगा जो पहले डाले गए थे, और यह दौड़ की स्थिति के लिए कमजोर होगा जहां चयन क्वेरी से पहले कुछ और रिकॉर्ड दर्ज करता है। – ceejayoz

+2

?? अवधि में एक अद्वितीय स्थिति है। एकमात्र चीज जो रेस हालत में चयन को प्रभावित कर सकती है वह एक डिलीट है, न कि एक और इंसर्ट। और ओपी के पद में (2) के अनुसार, वे पहले डाले गए रिकॉर्ड्स आईडी को शामिल करना चाहते हैं। – mellamokb

+0

यही वह है जो मुझे दिमाग में था; लेकिन इसे कोडिंग की कुछ पंक्तियों की आवश्यकता है। चयन के अलावा, मुझे परिणामों को लाने की आवश्यकता है और उन्हें थोड़ी देर में लूप (मुझे उपयोग करने वाले PHP में) प्राप्त करें। मुझे कुछ प्रकार की MySQL प्रतिक्रिया मिलनी है। – Googlebot

1

पहले, आईडी सिर्फ डाला प्राप्त करने के लिए, आप की तरह कुछ कर सकते हैं:

SELECT LAST_INSERT_ID() ; 

देखभाल, यह आपका अंतिम INSERT क्वेरी के बाद ही काम करेंगे और यह पहले आईडी केवल वापस आ जाएगी यदि आपके पास एकाधिक डालने हैं!

फिर, IGNORE विकल्प के साथ, मुझे नहीं लगता कि लाइनों को शामिल करना संभव है। जब आप INSERT IGNORE बनाते हैं, तो आप केवल MySQL को उन पंक्तियों को अनदेखा करने के लिए कहते हैं जिन्हें डुप्लिकेट प्रविष्टि बनाना होगा।

यदि आप यह विकल्प नहीं डालते हैं, तो INSERT रोक दिया जाएगा और आपके पास डुप्लिकेशन द्वारा संबंधित लाइन होगी।

+0

इग्नोर के बिना भी, यह केवल सिंगल-पंक्ति INSERT के लिए काम करेगा। मेरा आदेश एक बहु-पंक्ति INSERT – Googlebot

+0

है केवल मेरे उत्तर का पहला भाग IGNORE समेत था। –

+1

यदि आप PHP का उपयोग कर रहे हैं, तो आप प्रत्येक मार्ग में एक एकल INSERT के साथ लूप का उपयोग करके तालिका में आईडी स्टोर कर सकते हैं। –