質問

ループ内のクエリのクエリを使用して、各行の選択リストを作成する必要があるという問題を解決しないにはどうすればよいですか?

この例では、すべての顧客がその顧客に固有のアクションのリストを持っています。

<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を含めることだと思います。

役に立ちましたか?

解決

グループ属性を使用してCFOUTPUTを使用して、[CFSelectを使用する代わりに)手動で選択リストを作成するのは非常に簡単です。

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

注意してください。ネストされたcfoutputsを正しく動作させるために、Custidを最初の(または唯一の)順序として指定する必要があります。テストされていないので、タイプミスがあるかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top