2010-07-02 4 views
1

루프 내에서 쿼리 쿼리를 사용하여 각 행에 대해 선택 목록을 작성해야하는 문제를 어떻게 해결하지 않습니까? 내 예를 설명하는 데 도움이 경우루프 내에서 선택 목록 작성

<cfquery name="qryAction" datasource="myDataSource"> 
SELECT ActionID,CustID,ActionName FROM AvailableActions 
</cfquery> 
<cfquery name="qryOrderHeader" datasource="myDataSource"> 
SELECT CustID FROM OrderHeader 
</cfquery> 
<html> 
<body> 
<cfform preservedata="yes"> 
    <cfloop query="qryOrderHeader"> 
     <cfquery name="qry3" dbtype="query"> 
     SELECT ActionID,ActionName FROM qryAction 
     WHERE CustID = #qryOrderHeader.CustID# 
     </cfquery> 
     <cfselect name="ActionID" query="qry3" display="ActionName" value="ActionID" /> 
    </cfloop> 
</cfform> 
</body> 
</html> 

가 여기에 SQL의 :이 예에서

, 모든 고객은 해당 고객에 고유 한 행동의 목록이 있습니다.

use tempdb 
    GO 
    create table Cust(
    CustID Int Identity Primary Key, 
    CustName Varchar(255) 
    ) 
    GO 
    INSERT INTO Cust(CustName) values('One') 
    INSERT INTO Cust(CustName) values('Two') 
    GO 
    create table AvailableActions(
    ActionID Int Identity Primary Key, 
    CustID Int, 
    ActionName Varchar(255) 
    ) 
    GO 
    INSERT INTO AvailableActions(CustID,ActionName) VALUES(1,'Insert') 
    INSERT INTO AvailableActions(CustID,ActionName) VALUES(1,'Edit') 
    INSERT INTO AvailableActions(CustID,ActionName) VALUES(1,'Delete') 
    INSERT INTO AvailableActions(CustID,ActionName) VALUES(2,'Insert') 
    INSERT INTO AvailableActions(CustID,ActionName) VALUES(2,'Edit') 
    GO 
    CREATE TABLE OrderHeader(
    OrderHeaderID Int Identity Primary Key, 
    CustID Int 
    ) 
    INSERT INTO OrderHeader(CustID) VALUES(1) 
    INSERT INTO OrderHeader(CustID) VALUES(2) 
    INSERT INTO OrderHeader(CustID) VALUES(2) 

가장 좋은 결과는 qryOrderHeader에 ActionID 및 ActionName을 포함하는 것입니다.

<cfquery name="qryAction" datasource="myDataSource"> 
    SELECT ActionID,CustID,ActionName 
    FROM AvailableActions 
    ORDER BY CustID 
</cfquery> 

<cfoutput query="qryAction" group="CustID"> 
    <select name="actionid"> 
    <cfoutput> 
     <option value="#val(ActionID)#">#htmlEditFormat(ActionName)#</option> 
    </cfoutput> 
    </select> 
</cfoutput> 

주 첫 번째 (또는 유일한) 순서에 의해로 CustID를 지정해야합니다

+0

감사합니다. Michael. AvailableActions 테이블을 OrderHeader 테이블에 조인하면 OrderHeader 당 여러 행이 생성됩니다. –

+0

Michael의 의견은 어디에 있는지 잘 모르겠지만 여러 행을 가져 오기 위해 합류하는 방법이 있습니다. 그러면 Ben의 대답에 따라 그룹화를하면 자신이 원하는 것을 얻을 수 있습니다. –

답변

4

그것은 그룹 속성 cfoutput과를 사용하여 (대신 cfselect를를 사용하는) 수동으로 선택 목록을 작성 꽤 간단합니다 중첩 된 cfoutputs가 올바르게 작동하도록합니다. 테스트되지 않았으므로 오타가있을 수 있습니다.

+0

감사합니다. 예제에서는 모든 OrderHeader를 반복합니다. Qry3은 모든 행마다 다릅니다. –

+2

Phillip, 주문 헤더를 사용하지 않으려면 기본 가입을 사용하십시오. 원칙은 동일합니다. –