0

我有一个由两个循环生成的下拉列表。内部循环生成一系列数字,即从 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' 
4

2 回答 2

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 使用相同的策略。

于 2012-04-10T20:30:47.203 回答
1

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

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

于 2012-04-10T20:11:26.040 回答