如果我的复选框被选中,如何在活动元素中显示?

How to show in Active elements if my check box is checked?

我在解决这个问题时遇到了问题。在我的 where 子句中,我有一个逻辑,它只给我 table 中的活动字段。但我想如果我的复选框被选中以给我活动和非活动元素。我该如何解决?是否可以将 cfif 放在 where 子句或其他方式周围?这是我的查询:

SELECT Date, Name, Time, Active
       Case when Active = 1 then 'Yes' else 'No' end as Active
FROM City
<cfif form.ActiveCheck GT 0>
WHERE Active = 0
</cfif>
ORDER BY Date DESC

这是我的复选框代码:

<input type="Checkbox" name="ActiveCheck" id="ActiveCheck" value="0" unchecked>All<br>     

如果我没理解错的话,您不想在勾选复选框时按查询中的活动列进行过滤?为此,您需要执行以下操作:

<cfquery name="myQ">
    SELECT Date, Name, Time, Active
        Case when Active = 1 then 'Yes' else 'No' end as Active
    FROM City
    <cfif !structKeyExists(form, "ActiveCheck")>
        <!--- checkbox is not ticked so just get inactive --->
        WHERE Active = <cfqueryparam value="0" cfsqltype="cf_sql_integer">
    </cfif>
    ORDER BY Date DESC
</cfquery>

....

<input type="Checkbox" name="ActiveCheck" id="ActiveCheck" value="0">All<br>

这类似于 John 的回答,但我不喜欢 <cfquery> 里面的 <cfif>。我希望数据库服务器的查询计划尽可能少。 注意: IIF() 是一种老式方法。

<cfquery name="myQ">
DECLARE @Active bit = <cfqueryparam value="#IIF(stuctkeyExists(form, 'activecheck'), 1, 0)#" cfsqltype="cf_sql_bit">

SELECT Date, Name, Time, Active,
    Case when Active = 1 then 'Yes' else 'No' end as Active
FROM City
WHERE @ActiveCheck = 0 
OR   (@ActiveCheck = 1 AND Active = 1)
ORDER BY Date DESC
</cfquery>