0

2 つのループによって生成されるドロップダウン リストがあります。内側のループは、0 から 23 までの一連の数値を生成します。外側のループは、データベースに格納されている値に基づいて 23 の数値から正しい値を選択するクエリ ループです。

ここでの問題は、これらの 2 つのループが競合し、0 から 23 までの数字が 2 回表示されることです。この問題を回避しながら、両方のループを維持するにはどうすればよいですか? この問題は、フォームを 2 回送信しようとしてユーザーの入力を削除することによって、フォームが送信されるときにも問題を引き起こします。

これは私のコードです:

<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 に答える