我有一个很好的搜索,看看是否有类似于我想要做的事情。没有什么特别涵盖它,尽管没有进一步的麻烦。
我希望我的cfloop可以在搜索页面上的任何复选框中工作,并显示从数据库中提取的相应结果。这就是我到目前为止所做的:
<cfquery name="joblibrary">
SELECT *
FROM tblJobLibraryRoles JOIN tblJobLibraryCategories
ON tblJobLibraryRoles.category = tblJobLibraryCategories.id
<cfloop list="#form.cbGrade#" index="i">
WHERE grade=<cfqueryparam cfsqltype="cf_sql_varchar" value="#i#"/>
</cfloop>
ORDER BY category, grade, title, heraRef;
</cfquery>
如果只勾选了一个复选框,它现在可以正常工作了,所以我基本上问我可以让这种类型的CFLOOP以我创建它的方式工作,还是我咆哮错误的树?
答案 0 :(得分:5)
您不需要循环。只需使用sql关键字“in”。
where somefield in (
<cfqueryparam
cfsqltype="cf_sql_varchar" value="#form.checkboxfield#"
list="yes">
)
您只需要做一些事情来应对没有选中框的情况。
答案 1 :(得分:1)
IN ()
当然是处理这种情况的方法(也适用于其他sql语句),但有时您可能希望多个WHERE条件完全由变量定义。
同样,IN ()
是此处的解决方案,但我会向您展示如何执行您最初想要做的事情。
只需添加一个WHERE 0=0
(或1 = 1或anystring = anysamestring。您甚至可以说Where 'trickwhere'='trickwhere'
但是没有理由对它进行罗嗦)并使用其他方式循环使用一个AND而不是。
<cfquery name="joblibrary">
SELECT * from tblJobLibraryRoles JOIN tblJobLibraryCategories ON tblJobLibraryRoles.category=tblJobLibraryCategories.id
WHERE 0=0
<cfloop list="#form.cbGrade#" index="i">AND grade=<cfqueryparam cfsqltype="cf_sql_varchar" value="#i#"/></cfloop>
ORDER BY category, grade, title, heraRef;
</cfquery>