Coldfusion 在搜索之前获取额外的或

Coldfusion 在搜索之前获取额外的或,coldfusion,cfml,cfquery,Coldfusion,Cfml,Cfquery,我有这个查询,我得到了一个额外的或后面的and子句,搜索失败 <cfset CountVar = 1> <cfquery name="qFiltered"> SELECT id,name,email,useris,roleid FROM users WHERE 1=1 <cfif search NEQ ""&

我有这个查询,我得到了一个额外的或后面的and子句,搜索失败

<cfset CountVar = 1>
        <cfquery name="qFiltered">
            SELECT id,name,email,useris,roleid
            FROM users
            WHERE 1=1
                <cfif search NEQ "">
                    AND (
                        <cfloop list="#aColumnArray#" index="sSearch">
                            <cfif CountVar NEQ countOfColumns> OR </cfif> 
                            #sSearch# LIKE <cfqueryparam value="%#search#%" cfsqltype="cf_sql_varchar" />
                            <cfset CountVar += 1>
                        </cfloop>
                    )
                </cfif>
            
        </cfquery>
计数器中出现错误,无法验证CountOfColumn的数量

<cfset var countOfColumns = listLen(aColumnArray)>
这个怎么样

 <cfquery name="qFiltered">
        SELECT id,name,email,useris,roleid
        FROM users
        WHERE 1 = 1
        <cfif search NEQ "">
            AND (
                0 = 1 
                <cfloop list="#aColumnArray#" index="sSearch">
                   OR 
                   [#sSearch#] LIKE <cfqueryparam value="%#search#%" cfsqltype="cf_sql_varchar" />
                </cfloop>
              )
        </cfif>
  </cfquery>
这个怎么样

 <cfquery name="qFiltered">
        SELECT id,name,email,useris,roleid
        FROM users
        WHERE 1 = 1
        <cfif search NEQ "">
            AND (
                0 = 1 
                <cfloop list="#aColumnArray#" index="sSearch">
                   OR 
                   [#sSearch#] LIKE <cfqueryparam value="%#search#%" cfsqltype="cf_sql_varchar" />
                </cfloop>
              )
        </cfif>
  </cfquery>

这里的基本逻辑是在第一个条件之前或之后的所有WHERE条件:

<cfset CountVar = 1>
<cfloop list="#aColumnArray#" index="sSearch">
    <cfif CountVar gt 1> OR </cfif> 
    #sSearch# LIKE <cfqueryparam value="%#search#%" cfsqltype="cf_sql_varchar" />
    <cfset CountVar++>
</cfloop>
第一次迭代没有OR,所有后续迭代前面都有OR


顺便说一句:带有前导通配符的LIKE不能使用索引,这将导致性能不佳。考虑全文索引。

< P>这里的基本逻辑是预置或对于第一个条件之后的所有条件:

<cfset CountVar = 1>
<cfloop list="#aColumnArray#" index="sSearch">
    <cfif CountVar gt 1> OR </cfif> 
    #sSearch# LIKE <cfqueryparam value="%#search#%" cfsqltype="cf_sql_varchar" />
    <cfset CountVar++>
</cfloop>
第一次迭代没有OR,所有后续迭代前面都有OR


顺便说一句:带有前导通配符的LIKE不能使用索引,这将导致性能不佳。考虑一个全文索引。

如果实际上是一个字符串/列表,你应该考虑重命名AcOLUnRead。如果实际上是一个字符串/列表,你应该考虑重命名AcOcUnLabar。即使它是正确的,如果你简单地解释了后面的逻辑,那就好了。即使是正确的,如果你能简单地解释一下背后的逻辑就好了。