我如何获得最近插入的记录ID数组?

时间:2013-08-29 15:10:10

标签: mysql coldfusion

我有一个名为“问题”的表。此表可能有多个问题。在这里,我循环遍历插入查询以插入所有问题值以便有重复的问题。它成功添加了问题,但问题是我无法获取最近插入的问题记录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。任何人都可以告诉我,无论如何都要知道这一点。感谢。

3 个答案:

答案 0 :(得分:4)

没有本地方法可以做到这一点。您最好的调用是在表格中添加一个时间戳列,表示插入日期(默认情况下,TIMESTAMP字段将NOW()作为默认值。)

或者,您可以从应用程序代码中检查每次插入的结果(例如,使用LAST_INSERT_ID())。然后在应用程序代码中构建数组。

答案 1 :(得分:2)

(更多的附录,但评论太长了......)

Like RandomSeed said,MySQL中不支持捕获由insert生成的多个记录ID。他描述的替代方案之一是单独插入记录,并在每次迭代时捕获新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(),但通常应将其放在与INSERT相同的cfquery标记内,以确保您获得当前连接的最后一个ID。注意:要使其正常工作,请the datasource settings must allow multiple statements(默认情况下不启用)。

答案 2 :(得分:0)

last_insert_id()就像它的名字一样:你得到你插入的最后记录的ID。如果您要插入多条记录,那么您必须为每条记录执行last_insert_id()。无法检索先前插入的ID - 这些ID将丢失。