我已经创建了这个有效的代码,并且做了我想要它做的事情,但是我想知道是否有更好的更聪明的方法来做到这一点。这是代码:
<cfset myList = ValueList(qSeminarWisReg.SeminarWisTitle,",")>
<cfif ListLen(myList,",") lte 1>
<cfquery datasource="#APPLICATION.dataSource#" name="qSeminarWisRegTwo">
SELECT * FROM SeminarWis
WHERE SeminarWisID = <cfqueryparam value="#myList#" cfsqltype="cf_sql_integer">
</cfquery>
<cfelse>
<cfquery datasource="#APPLICATION.dataSource#" name="qSeminarWisRegTwo">
SELECT * FROM SeminarWis
WHERE 0 = 0
AND (SeminarWisID = <cfqueryparam value="100000000" cfsqltype="cf_sql_integer">
<cfloop index = "x" list = "#myList#" delimiters = ","> OR SeminarWisID = #x#</cfloop>)
</cfquery>
</cfif>
基本上我有一个动态生成的列表,其中包含数字,用逗号分隔。现在这些数字对应于表中的唯一键,因此我只是动态地抓取用户想要的所有行。
就像我说的,这有效,但如果有人有任何关于如何让这更好的提示让我知道!困扰我的部分是我必须使用“1000000”值(一个不存在的值)才能进入OR语句。
答案 0 :(得分:10)
我认为你想使用带有list =“true”的CFQUERYPARAM和IN运算符:
SELECT *
FROM SeminarWis
WHERE SeminarWisID IN (
<cfqueryparam value="#myList#" cfsqltype="cf_sql_integer" list="true" />
)
请注意,这仅适用于listLen(myList)GTE 1