0

「質問」という名前のテーブルが 1 つあります。この表には複数の質問がある場合があります。ここでは、挿入クエリをループして、質問が重複しているすべての質問値を挿入しています。質問は正常に追加されていますが、最近挿入された質問レコード ID のリストまたは配列を取得できないという問題があります。

これがコードです。

   <cfloop query="questions">
      <cfquery name="insertDuplicatequestions">
          INSERT INTO questions (
              survey_Id, questiontype_Id, question, rank, isrequired
          )
          VALUES 
          (
              <cfqueryparam cfsqltype="cf_sql_bigint" value="#getSurveyid.id#">
             , <cfqueryparam cfsqltype="cf_sql_bigint" value="#questions.questiontype_Id#">
             , <cfqueryparam cfsqltype="cf_sql_varchar" value="#questions.question#">
             , <cfqueryparam cfsqltype="cf_sql_numeric" value="#questions.rank#">
             , <cfqueryparam cfsqltype="cf_sql_integer" value="#questions.isrequired#"> 
          ) 
          <cfif questions.CurrentRow LT questions.RecordCount>,</cfif>
      </cfquery> 

      <cfquery name="getQuestionid">
       SELECT LAST_INSERT_ID() AS id                  
      </cfquery>  
       <cfset response = getQuestionid.id>
  </cfloop>

LAST_INSERT_ID() を試してみましたが、最後と単一のレコード ID を取得します。とにかくこれを理解する方法があれば、誰でも教えてください。ありがとう。

4

3 に答える 3

2

(補足ですが、コメントするには長すぎます...)

RandomSeed が言ったように、MySQL では、によって生成された複数のレコード ID をキャプチャすることinsertはサポートされていません。彼が説明した代替案の 1 つは、レコードを個別に挿入し、反復ごとに新しい ID を取得することです。以下は、cfquery のresult属性を使用してこれを行う方法の大まかな概要です。

 <!--- initialize array that will store the new ids --> 
 <cfset idArray = []>

 <!--- use a transaction to ensure ALL of the inserts succeed or fail together -->
 <cftransaction>
     <cfloop ...>

         <!--- use the "result" attribute to capture the new id --->
         <cfquery result="addRecord" ....>
           INSERT INTO YourTable (...) VALUES (...);
         </cfquery>

         <!--- save the id in the array -->
         <cfset arrayAppend(idArray, addRecord.GENERATED_KEY)>

     </cfloop>
 </cftransaction>

 <!--- display new id's --->
 <cfdump var="#idArray#">

余談ですが、使用できますがLAST_INSERT_ID()、通常cfqueryは INSERT と同じタグ内に配置して、現在の接続の最後の ID を確実に取得する必要があります。注: 動作させるには、データソース設定で複数のステートメントを許可する必要があります(デフォルトでは有効になっていません)。

于 2013-08-29T20:04:13.917 に答える
0

last_insert_id()名前のとおりに機能します。挿入したLASTレコードの ID を取得します。複数のレコードを挿入する場合は、すべてのレコードに対して last_insert_id() を実行する必要があります。以前の挿入の ID を取得する方法はありません。それらは失われます。

于 2013-08-29T15:13:59.043 に答える