1

結合するレコードが存在する場合、クエリをループしてテーブルに結合しています。

その行に結合するレコードがない場合、行が完全に戻らないようにする方法はありますか?

編集:そこにif文がありませんでした。レコードをループしてセットアップ オプションをチェックしています。そのセットアップ オプションがレコードに存在し、クエリ「someRecord」に対応するレコードがない場合、それらは返したくないレコードです。

<cfloop query="myquery">
    <cfif listfindnocase(myquery.setup_option,"required_information")>
        <cfquery name="someRecord" dbtype="query">
            select * from second_table
            where key_id = '#myquery.key_id#'
        </cfquery>
        <cfif someRecord.recordcount eq 0>

        <!--- Need something here to remove this row from returning in the query --->

        </cfif>
    </cfif>
</cfloop>
4

3 に答える 3

5

OK、ここでの模範的な答えは次のとおりです。これは CFML で行うのではなく、DB で行います。CF は文字列生成用であり、データ操作用ではありません。

この質問は、最初にクエリから行を削除する方法を尋ねているため、少し誤解を招く可能性がありますが、これは要件ではありません (質問のコメントを参照)。私はその質問にさらに下で答えました。

単純にループの反復を終了するには、<cfcontinue>. これにより、ループの現在の反復がすぐに終了し、コード ブロックの先頭に戻り、次の反復が開始されます。独自のコード例を使用:

<cfloop query="myquery">
    <cfif listfindnocase(myquery.setup_option,"required_information")>
        <cfquery name="someRecord" dbtype="query">
            select * from second_table
            where key_id = '#myquery.key_id#'
        </cfquery>
        <cfif someRecord.recordcount eq 0>
            <cfcontinue>
        </cfif>
        <!--- handle the rows you *do* want to process here --->
    </cfif>
</cfloop>

ただし、クエリから行を削除する方法の質問に答えるには、エレガントな方法はありません。エレガントでないオプションが 2 つあります。

// pseudocode, for brevity
newQuery = queryNew(oldQuery.columnList)
loop (oldQuery)
    if the row is not wanted
        continue
    /if
    add a row to newQuery
    add the row data to newQuery
/loop

または:

listOfRowsToExclude = someMechanismToArriveAtSaidList()
<cfquery name="newQuery" type="query">
    SELECT   *
    FROM     oldQuery
    WHERE    id NOT IN (listOfRowsToExclude)
    ORDER BY [same clause as for oldQuery]
</cfquery>

ただし、ここで得られる最善のアドバイスは、データが属する DB でデータ処理を行うことです。この種のロジックを a) CFML アプリに入れるべきではありません。b)あなたのビューコードで、これがすべて起こっていると私が疑っています。

ロジックをディスプレイから分離します。また、データ処理ロジックをアプリケーション ロジックから分離します。

于 2014-12-29T16:59:59.607 に答える
0

cfif を閉じた後に何か他のことが行われていると思います。if ステートメントを反転して、これを行う必要があります。

<cfloop query="myquery">
    <cfquery name="someRecord" dbtype="query">
        select * from second_table
        where key_id = '#session.key_id#'
    </cfquery>

    <cfif someRecord.recordcount neq 0>

      <!--- do what you would do when record count NOT equal to zero --->
    </cfif>
</cfloop>
于 2014-12-29T16:13:15.607 に答える