Coldfusion cfloop通过cfquery中的复选框

时间:2014-11-06 13:46:19

标签: mysql coldfusion

我有一个很好的搜索,看看是否有类似于我想要做的事情。没有什么特别涵盖它,尽管没有进一步的麻烦。

我希望我的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以我创建它的方式工作,还是我咆哮错误的树?

2 个答案:

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