我有一个由两个循环生成的下拉列表。内部循环生成一系列数字,即从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'
答案 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(如评论中所建议的)...但请确保您知道您包括的内容以及排除的内容。您需要知道为什么您的查询不符合您的期望:)