2011-10-18 41 views
8

Tôi đang lặp qua các kết quả của truy vấn và tôi cần giới hạn số hàng được hiển thị. Tôi cần sử dụng cfoutput vì tôi đang sử dụng thuộc tính group và tôi không thể sử dụng maxrows vì không phải tất cả các hàng sẽ được hiển thị.Cách thoát khỏi Cfoutput

Tôi đã cố gắng sử dụng <cfbreak> bên trong <cfoutput>, nhưng điều đó sẽ xảy ra lỗi.

Làm cách nào để thoát khỏi vòng lặp <cfoutput>?

+2

http://cfbugs.adobe.com/cfbugreport/flexbugui/cfbugtracker/main.html#bugId=72819 – Henry

+4

'cfoutput' là một chút như khách sạn California. AFAIK, không có cách nào thanh lịch để thoát khỏi nó sớm. Nếu bạn đang sử dụng một cơ sở dữ liệu như MS SQL 2005, tôi sẽ đề nghị hạn chế các hàng trong SQL, không phải là cfoutput. – Leigh

+0

Bạn có thể không "nhóm theo" trong truy vấn của mình để loại bỏ các bản sao và sau đó chỉ sử dụng cfloop, từ đó bạn có thể bẻ khóa? –

Trả lời

8

Nếu nhóm của bạn chỉ ở đó để loại bỏ các bản sao khỏi kết quả của bạn, tôi sẽ đề nghị sử dụng truy vấn của bạn để cắt chúng xuống, bạn có thể cfloop (chọn riêng biệt và giảm danh sách cột trả về của bạn).

Nếu bạn đang sử dụng nhóm của mình bằng cách "nhóm" kết quả của bạn Bạn có thể chạy bộ đếm trong vòng lặp và câu lệnh cfif bên trong vòng đầu tiên của bạn để bỏ qua kết quả sau này.

Bạn có thể giả mạo các nhóm bằng cách lựa chọn trong cfloop của bạn bằng cách kết hợp giá trị từ hàng trước nếu bạn cần cfbreak

<cfloop query="queryname"> 
    <cfif queryname.column[currentrow-1] neq queryname.column[currentrow]> 
    #queryname.column# 
    </cfif> 
</cfloop> 

lưu ý Ngẫu nhiên: bạn có thể maxrows trên bất kỳ/tất cả các cấp cfoutput nhóm bạn

<cfset tmp = querynew('id,dd')> 
<cfloop from="1" to="20" index="i"> 
    <cfset queryaddrow(tmp,1)> 
    <cfset querysetcell(tmp,'id',rand(),i)> 
    <cfset querysetcell(tmp,'dd',(i mod 4),i)> 
</cfloop> 
<cfquery dbtype="query" name="tmp">select * from tmp order by dd</cfquery> 

<cfoutput query="tmp" group="dd" maxrows="2">#dd#<br 
    <ul> 
    <cfoutput maxrows="2" group="id"><li>#id#</li></cfoutput> 
    </ul> 
</cfoutput> 
+0

Ah! Maxrows! Tôi biết nó đã ở đó nhưng không nghĩ về việc sử dụng này. Hoàn hảo! – Barry

+0

Siêu cộng một cho cấp độ tối đa ở mọi cấp độ của cfoutput! Đó là một phần kiến ​​thức tuyệt vời để có. – tobylaroni

4

Bạn có thể sử dụng thẻ cfthrow để kích hoạt ngoại lệ cho phép bạn thoát khỏi vòng lặp bằng cách sử dụng cfcatch, sau đó bạn có thể bỏ qua ngoại lệ và tiếp tục xử lý. Điều đó sẽ cung cấp cho bạn những gì bạn muốn.

<cftry> 
    <cfset i = 0> 
    <cfoutput query="qMyQuery" group="someGroup"> 
      <cfset i = i + 1> 
      Parent 
        <cfoutput> 
          Child 
        </cfoutput> 

        <cfif i GTE 10> 
          <cfthrow type="break"> 
        </cfif> 
    </cfoutput> 

    <cfcatch type="break"> 
      <!--- DO NOTHING - THIS IS A HACK FOR NOT BEING ABLE TO USE CFBREAK inside cfoutput. ---> 
    </cfcatch> 
    </cftry> 
Các vấn đề liên quan