Как я могу циклично выполниться по запросу для определенного количества раз, которое может быть больше, чем результат?

Я должен циклично выполниться по запросу точно 12 раз для завершения строк в форме, но редко будет возврат запроса 12 строк. Атрибут cfquery endRow не вынуждает цикл продолжать идти, если результат <12. Если это сделало, который будет идеален для использования чего-то как запрос cfloop = "myQuery" endRow = "12"... 2 опции, которые я имею теперь, состоят в том, чтобы пропустить цикл и выписать все 12 строк, но это приводит к большому количеству дублирующего кода (существует 20 столбцов), или сделайте запрос запросов для каждой строки, которая походит на большую потраченную впустую обработку. Спасибо за любые идеи.

5
задан JS. 20 March 2010 в 21:30
поделиться

2 ответа

Вы можете просто использовать

maxrows="12"

Хотя, я думаю, что в вашей логике может быть что-то не так, раз вам приходится это делать. возможно, если вы опубликуете часть нашего кода, я смогу взглянуть и предложить лучший подход.

maxRows пока подойдет

UPDATE

Забыл упомянуть, maxrows нужно использовать с "cfoutput query", так как cfloop query его не поддерживает.

В этом случае вы сделаете что-то вроде:

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

UPDATE of UPDATE

Поняв, что именно вы хотите, я написал следующий код, который практически полностью соответствует тому, что вам нужно:

<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#">

Это добавит новые строки в ваш запрос динамически, если это будет необходимо (т.е. в случае, если у вас нет 12 строк в вашем наборе записей)

Это имитирует набор записей, просто чтобы вы могли скопировать и вставить код и увидеть результаты.

надеюсь, это поможет ;-)

2
ответ дан 15 December 2019 в 06:22
поделиться

Если вас не интересуют значения столбцов, вы можете попробовать что-нибудь вроде этого ...

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

 <cfif testQuery.recordcount LT 12>

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

 </cfif>
1
ответ дан 15 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: