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

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

Ответы [ 2 ]

2 голосов
/ 21 марта 2010

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

maxrows="12"

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

maxRows пока добьется цели, хотя

UPDATE

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

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

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

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

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

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

1 голос
/ 21 марта 2010

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

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

 <cfif testQuery.recordcount LT 12>

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

 </cfif>
...