0

我有一张名为“问题”的表。此表可能有多个问题。在这里,我循环插入查询以插入所有问题值以存在重复问题。它正在成功添加问题,但问题是我无法获取最近插入的问题记录 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

4

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

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

于 2013-08-29T15:13:10.753 回答
2

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

就像 RandomSeed 所说insert, MySQL 不支持捕获由 an 生成的多个记录 id 。他描述的替代方法之一是单独插入记录,并在每次迭代中捕获新 ID。result以下是使用 cfquery 的属性如何执行此操作的粗略概述。

 <!--- 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()像它的名字一样工作:你得到你插入的最后一条记录的 ID。如果要插入多条记录,则必须为每条记录执行 last_insert_id() 。无法检索先前插入的 ID - 这些已丢失。

于 2013-08-29T15:13:59.043 回答