Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

लिंक किए गए फ़ील्ड के साथ दो सम्मिलित क्वेरी

कुछ सरलीकरण संभव है। सबसे पहले आपको अपने सभी आदेशों को एक लेन-देन के अंदर संलग्न करने की आवश्यकता है क्योंकि यह शास्त्रीय मामला है जहां डाले गए रिकॉर्ड सख्ती से संबंधों में हैं और इसका कोई मतलब नहीं है कि कुछ आंशिक रूप से पूर्ण किए गए रिकॉर्ड सेट हैं।

using(MySqlConnection conn = new MySqlConnection(connStr))
{
    conn.Open();
    using(MySqlTransaction tr = conn.BeginTransaction())
    {
        ...
        // MySqlCommand code  goes here
        ...
        tr.Commit();
   }
}

अब, आप अपना सम्मिलित प्रश्न sql बदल सकते हैं एक दूसरा कथन जोड़ने के लिए जो सम्मिलित अंतिम आईडी लौटाता है

 string queryUpdateQuestions = @"INSERT INTO questions (.....);
                                 SELECT LAST_INSERT_ID()";

 using(MySqlCommand cmdUpdateQuestions = new MySqlCommand(queryUpdateQuestions, conn, tr))
 {
    // build the parameters for the question record
    ......

    // Instead of ExecuteNonQuery, run ExecuteScalar to get back the result of the last SELECT
    int lastQuestionID = Convert.ToInt32(cmdUpdateQuestions.ExecuteScalar());

    ..

 }

ध्यान दें कि कैसे, MySqlCommand कंस्ट्रक्टर पर, वर्तमान लेनदेन के संदर्भ को पारित किया जाता है। यह एक ऐसे कनेक्शन के साथ काम करने के लिए आवश्यक है जिसमें एक लेन-देन खुला है।

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

string queryUpdateAnswers = @"INSERT INTO answers (question_id, answer) 
                             VALUES (@question_id, @answer);
                             SELECT LAST_INSERT_ID()";

using(MySqlCommand cmdUpdateAnswers = new MySqlCommand(queryUpdateAnswers, conn, tr))
{
    // next move the loop inside the using and prepare the parameter before looping to  
    // to avoid unnecessary rebuild of the parameters and the command
    cmdUpdateAnswers.Parameters.Add("@answer", MySqlDbType.VarChar);
    cmdUpdateAnswers.Parameters.Add("@question_id", MySqlDbType.Int32);

    int lastAnswerID = 0;  
    // Loop backward so the last answer inserted is the 'correct' one and we could get its ID
    for (int b=a; b >= 1; b--)
    {
         cmdUpdateAnswers.Parameters["@answer"].Value = ((TextBox)this.FindControl("txtAnswer" + b)).Text;
         cmdUpdateAnswers.Parameters["@question_id"].Value = lastQuestionID;
         lastAnswerID = Convert.ToInt32(cmdUpdateAnswers.ExecuteScalar());
    }
    ....
}

अब आप आखिरी कमांड चला सकते हैं जो सवाल को lastAnswerID

. से अपडेट करती है

(एक आखिरी नोट, मुझे लगता है कि प्रश्न_आईडी और उत्तर_आईडी फ़ील्ड संख्यात्मक प्रकार के हैं, वर्चर नहीं, इसके लिए आवश्यक है कि इन फ़ील्ड के पैरामीटर एक इंट 32 होंगे वर्चर नहीं)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. उसी तारीख से मान जोड़ें

  2. सबसे लोकप्रिय श्रेणी खोजने के लिए एसक्यूएल

  3. MySQL में ट्रेलिंग व्हाइटस्पेस कैसे निकालें

  4. डेटाबेस से मान कैसे प्राप्त करें जो शून्य नहीं हैं

  5. php . का उपयोग करके ड्रॉपडाउन सूची चयन के आधार पर डेटाबेस से डेटा प्राप्त करना चाहते हैं