我正在使用循环查询并在存在要加入的记录时加入表。
当没有记录要加入该行时,有没有办法让行完全不返回?
编辑:我在那里错过了一个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>
答案 0 :(得分:4)
好的,这里的模型答案是:不要在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>
然而,为了回答如何从查询中删除行的问题,没有优雅的方法。你有两个不优雅的选择:
// 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>
但到目前为止,最好的建议是在数据库中进行数据处理。你不应该把这种逻辑放在你的CFML应用程序中; b)在你的视图代码中,我怀疑这一切都在进行。
将您的逻辑与显示屏分开。并将数据处理逻辑与应用程序逻辑分开。
答案 1 :(得分:1)
不是循环查询以生成多个SELECT
(正如其他人提到它使用不必要的资源),也许可以使用IN
尝试ValueList
子句来提取列表标识:
<cfset myqueryIDs = ValueList(myquery.key_id)>
<cfif listfindnocase(myquery.setup_option,"required_information")>
<cfquery name="allRecords" dbtype="query">
select * from second_table
where key_id IN (#myqueryIDs#) <!--- Assuming numeric IDs --->
</cfquery>
</cfif>
答案 2 :(得分: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>