Coldfusion 我如何循环查询一个可能大于结果的特定次数?

Coldfusion 我如何循环查询一个可能大于结果的特定次数?,coldfusion,Coldfusion,我需要在一个查询上循环12次才能完成表单中的行,但查询很少返回12行。如果结果小于12,cfquery endRow属性不会强制循环继续。如果是这样的话,最好使用cfloop query=“myQuery”endRow=“12”。。。 我现在有两个选择:跳过循环并写出所有12行,但这会导致大量重复代码(有20列),或者对每行进行查询,这似乎是浪费了大量的处理。 谢谢您的建议。您只需使用 maxrows="12" 尽管如此,我认为你这样做的逻辑可能有问题。也许如果你发布一些我们的代码,我可以看一

我需要在一个查询上循环12次才能完成表单中的行,但查询很少返回12行。如果结果小于12,cfquery endRow属性不会强制循环继续。如果是这样的话,最好使用cfloop query=“myQuery”endRow=“12”。。。 我现在有两个选择:跳过循环并写出所有12行,但这会导致大量重复代码(有20列),或者对每行进行查询,这似乎是浪费了大量的处理。 谢谢您的建议。

您只需使用

maxrows="12"
尽管如此,我认为你这样做的逻辑可能有问题。也许如果你发布一些我们的代码,我可以看一看,并提出一个更好的方法

不过,麦克斯罗现在会做这件事

更新

忘了提到,maxrows必须与“cfoutput query”一起使用,因为cfloop query不支持它

在这种情况下,您将执行以下操作:

<cfoutput query="myQuery" maxRows="12">

更新的更新

在完全理解了您的需求之后,我编写了以下代码,这正是我认为您需要的:

<cfscript>
    qryTest = QueryNew("name,email");
    newRows = QueryAddRow(qryTest,5);

    tmp = querySetCell(qryTest, 'name', 'John', 1);
    tmp = querySetCell(qryTest, 'email', 'John@email.com', 1);

    tmp = querySetCell(qryTest, 'name', 'Paul', 2);
    tmp = querySetCell(qryTest, 'email', 'Paul@bob.com', 2);

    tmp = querySetCell(qryTest, 'name', 'George', 3);
    tmp = querySetCell(qryTest, 'email', 'George@bob.com', 3);

    tmp = querySetCell(qryTest, 'name', 'Ringo', 4);
    tmp = querySetCell(qryTest, 'email', 'Ringo@bob.com', 4);

    tmp = querySetCell(qryTest, 'name', 'Yoko', 5);
    tmp = querySetCell(qryTest, 'email', 'Yoko@bob.com', 5);
</cfscript>

<cfdump var="#qryTest#">

<form name="test">
    <cfoutput>
        <cfloop from="1" to="12" index="ii">
            <cfif ii GT qryTest.recordCount>
                <cfset tmp = QueryAddRow( qryTest, ii)>
            </cfif>
            Name: <input type="text" name="name_#ii#" value="#qryTest.name[ii]#"><br />
            Wmail: <input type="text" name="email_#ii#" value="#qryTest.email[ii]#"><br /><br />
        </cfloop>
    </cfoutput>
</form>

<cfdump var="#qryTest#">

qryTest=QueryNew(“姓名,电子邮件”);
newRows=QueryAddRow(qryTest,5);
tmp=querySetCell(qryTest,'name','John',1);
tmp=querySetCell(qryTest,'电子邮件','John@email.com', 1);
tmp=querySetCell(qryTest,'name','Paul',2);
tmp=querySetCell(qryTest,'电子邮件','Paul@bob.com', 2);
tmp=querySetCell(qryTest,'name','George',3);
tmp=querySetCell(qryTest,'电子邮件','George@bob.com', 3);
tmp=querySetCell(qryTest,'name','Ringo',4);
tmp=querySetCell(qryTest,'电子邮件','Ringo@bob.com', 4);
tmp=querySetCell(qryTest,'name','Yoko',5);
tmp=querySetCell(qryTest,'电子邮件','Yoko@bob.com', 5);
名称:
Wmail:

这将在必要时动态地向查询中添加新行(即,如果记录集中没有12行)

它模仿了一个记录集,这样你就可以复制粘贴代码并看到结果


希望有帮助;-)

如果您不关心列值,可以尝试以下操作

 <cfquery NAME="testQuery" datasource="#DB#" >
    SELECT 
       SOMETHING 
    FROM
      SOMETHING
 </cfquery>

 <cfif testQuery.recordcount LT 12>

   <cfset temp = QueryAddRow( testQuery, 12- testQuery.recordcount)>

 </cfif>

挑选
某物
从…起
某物

如果查询返回6行,您希望最后6行的列值是什么?没有设置值的表单字段。例如,如果用户想要编辑一张保存的发票,其中有12行,则在他们调出该发票时,将从查询中填充前6行,而下6行将没有值,因此用户可以在其中输入值并保存或提交。谢谢,我一直在质疑我的逻辑;)使用maxRows执行cfoutput与使用endRows执行cfloop查询的效果相同,因为这些属性决定了返回的最大数量,但不会要求至少返回那么多行。就逻辑而言:一个简单的用例是一张发票,用户可以编辑,但除了他们订购的发票外,还会显示一些空白行,以防他们想手动添加另一个项目。嗯,我现在理解了,我觉得我的答案现在没有多大意义。我会用更多的代码更新我的答案:-)非常感谢你的帮助。现在我有两个更好的方法来处理这个问题!很好,再次感谢!我对它做了一点修改,这样就不必为所有变量编制索引,但QueryAddressRow就是一个窍门。谢谢你的主意。我测试了这个概念的一个变体,将查询的recordcount减去12,并将其作为第一个循环的变量,然后对其余行进行另一个循环。现在很艰难,但我认为它能奏效。