1

現在、フィールドが空白の検索結果を除外する方法を見つけようとしています。簡単な方法は a を使用すること<cfif len(example) neq 0>#example#</cfif>ですが、これはクエリが不必要に結果を引き出していることを意味します。

<cfquery datasource="#datasource#" name="search">
    <cfif URL.for eq "names">
        Select artist_id, artist_name
        From artists
        Where approved = 1
        And active = 1
        <cfif StructKeyExists("URL.search")>
            <cfif URL.find eq "contains">
                And name LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#URL.search#%">
            <cfelseif URL.find eq "matches">
                And name = <cfqueryparam cfsqltype="cf_sql_varchar" value="#URL.search#">
            </cfif>
        </cfif>
        Order By name Asc

    <cfelseif URL.for eq "locations">
        <cfif URL.sort eq "town-az" or URL.sort eq "town-za">
            Select Distinct town
        <cfelseif URL.sort eq "county-az" or URL.sort eq "county-za">
            Select Distinct county
        <cfelseif URL.sort eq "country-az" or URL.sort eq "country-za">
            Select Distinct country
        </cfif>
        From artists
        Where approved = 1
        And active = 1
        <cfif StructKeyExists("URL.search")>
            <cfif URL.find eq "contains">
                <cfif URL.sort eq "town-az">
                    And town LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#URL.search#%">
                    Order By town Asc
                <cfelseif URL.sort eq "town-za">
                    And town LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#URL.search#%">
                    Order By town Desc
                <cfelseif URL.sort eq "county-az">
                    And county IS NOT NULL
                    And county LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#URL.search#%">
                    Order By county Asc
                <cfelseif URL.sort eq "county-za">
                    And county IS NOT NULL
                    And county LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#URL.search#%">
                    Order By county Desc
                <cfelseif URL.sort eq "country-az">
                    And country LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#URL.search#%">
                    Order By country Asc
                <cfelseif URL.sort eq "country-za">
                    And country LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#URL.search#%">
                    Order By country Desc
                </cfif>

            <cfelseif URL.find eq "matches">
                <cfif URL.sort eq "town-az">
                    And town = <cfqueryparam cfsqltype="cf_sql_varchar" value="#URL.search#">
                    Order By town Asc
                <cfelseif URL.sort eq "town-za">
                    And town = <cfqueryparam cfsqltype="cf_sql_varchar" value="#URL.search#">
                    Order By town Desc
                <cfelseif URL.sort eq "county-az">
                    And county IS NOT NULL
                    And county = <cfqueryparam cfsqltype="cf_sql_varchar" value="#URL.search#">
                    Order By county Asc
                <cfelseif URL.sort eq "county-za">
                    And county IS NOT NULL
                    And county = <cfqueryparam cfsqltype="cf_sql_varchar" value="#URL.search#">
                    Order By county Desc
                <cfelseif URL.sort eq "country-az">
                    And country = <cfqueryparam cfsqltype="cf_sql_varchar" value="#URL.search#">
                    Order By country Asc
                <cfelseif URL.sort eq "country-za">
                    And country = <cfqueryparam cfsqltype="cf_sql_varchar" value="#URL.search#">
                    Order By country Desc
                </cfif>
            </cfif>
        </cfif>
    </cfif>
</cfquery>

townおよびフィールドはサインアップ時のcountry必須フィールドであるため、これらのフィールドは問題ありませんが、郡/州フィールドを必須フィールドにしていないため、ユーザーが郡または州に入らない場合、値は NULL になります。上記のように、len()メソッドを使用して文字を含む結果のみを表示することもできますが、これはクエリが NULL の結果を引き出していることを意味し、引き出す必要はありません。私はすでに含めましAND county IS NOT NULLたが、これはまったく違いがないようです。誰かが私を正しい方向に向けることができますか? ありがとう。

4

2 に答える 2

1

最終的には些細な間違いでしたが、同様の問題を見つけた人には指摘する価値があります。既存の変数に基づいてステートメントを追加する場合は、クエリのすべてのレベルでそれらが必要ではないことを確認してください。

SELECT DISTINCT county
FROM   artists
WHERE  active = 1
AND    approved = 1
<cfif URL.sort eq "county-az" or URL.sort eq "county-za">
    AND county IS NOT NULL
</cfif>

上記は、クエリのコア内で変更する必要があるものです。検索語が存在するかどうかを確認する前に、すべての NULL 結果を除外するセクションが含まれていることに注意してください。

于 2013-05-07T13:21:15.560 に答える
0

@variablesSQLサーバーで使用する動的アプローチを使用してみてください:

declare @county varchar(50), @countylike varchar(50)

ColdFusion に変数が存在する場合は、変数を設定するロジックをいくつか追加します。

<cfif ....>

</cfif>

次に、where 句に次のようなものを追加します。

and (@county is null or county = @county)
and (@countylike is null or county like '%'+ @countylike +'%')
于 2013-05-08T23:44:45.257 に答える