CFLOOP重复

时间:2012-04-10 19:53:29

标签: coldfusion coldfusion-9 cfloop

我有一个由两个循环生成的下拉列表。内部循环生成一系列数字,即从0到23.外部循环是一个查询循环,它根据存储在我数据库中的值从23个数字中选择正确的值。

我的问题是这两个循环冲突导致从0到23两次显示数字。如何保持两个循环,但避免这个问题?通过尝试提交表单两次并删除用户的输入来提交表单时,此问题也会导致问题。

这是我的代码:

<select id="openHours#CountVar#" name="openHours#CountVar#">
 <cfloop query="doctorHours" >                
   <cfloop from="0" to="23" index="OpenHours"> 
   <option value="#openHours#"
      <cfif TimeFormat(doctorHours.openTime,'HH') EQ OpenHours AND CountVar EQ doctorHours.day > selected="selected"</cfif>>#OpenHours#</option>
   </cfloop>
  </cfloop>
</select>

这是我查询的CFDUMP

query
RESULTSET   
query
    CLOSETIME           DAY DOCTORID            OPENTIME
1   1970-01-01 16:00:00.0   4   2011041516290025478779  1970-01-01 10:00:00.0
2   1970-01-01 16:00:00.0   1   2011041516290025478779  1970-01-01 13:00:00.0
3   1970-01-01 16:00:00.0   2   2011041516290025478779  1970-01-01 13:00:00.0
CACHED  false
EXECUTIONTIME   0
SQL select doctorID, opentime, closetime, day from doctorBusinessHours where doctorID='2011041516290025478779' 

2 个答案:

答案 0 :(得分:2)

您应该只返回所需的小时数,然后循环创建下拉列表:

DATEPART(hh,yourdate)将返回您的日期时间值的小时数:

<cfquery name="doctorHours" datasource="#ds#">
    SELECT doctorID,DATEPART(hh,openTime) As OpenHours, DATEPART(hh,closetime) As CloseHours 
    FROM   doctorHours 
    WHERE  day = #CountVar#
    AND    doctorID='#docID#'
</cfquery>

ValueList会将您的查询结果转换为列表:

<cfset openTimesList = ValueList(doctorHours.OpenHours) />
<cfset closeTimesList = ValueList(doctorHours.CloseHours ) />

ListContains将返回列表中值的索引:

<select id="openHours#CountVar#" name="openHours#CountVar#">
    <cfloop from="0" to="23" index="OpenHours"> 
       <option value="#openHours#"
           <cfif ListContains(openTimesList,OpenHours) NEQ 0 > 
              selected="selected"
           </cfif>
       >#OpenHours#</option>
   </cfloop>
</select>

您可以对closeTimesList使用相同的策略。

答案 1 :(得分:1)

嗯....上面代码中显示的值的数量将与查询X 23返回的记录数相等。如果您查询返回2条记录,您将看到46个选项,依此类推。您似乎认为该查询只有1条记录。我建议也许还有更多。

在查询中尝试LIMIT 1或TOP 1 - 或使用Maxrows(如评论中所建议的)...但请确保您知道您包括的内容以及排除的内容。您需要知道为什么您的查询不符合您的期望:)