我有一个由两个循环生成的下拉列表。内部循环生成一系列数字,即从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' 发布于 2012-04-11 04:30:47
您应该只返回所需的小时数,然后循环创建下拉列表:
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-11 04:11:26
上面代码中显示的Hmmm....the值的数量将等同于查询X 23返回的记录数量。如果你的查询返回2条记录,你会看到46个选项,以此类推。看起来您认为查询只有1条记录。我会建议它可能有更多。
在您的查询中尝试LIMIT 1或TOP 1-或者使用Maxrows (如注释中所建议的)...但要确保你知道你在包括什么,你在排除什么。你需要知道为什么你的查询不是你所期望的:)
https://stackoverflow.com/questions/10095496
复制相似问题