为什么我会在具有类似条件的查询中获得错误的记录



我有一个ColdFusion 8应用程序,该应用程序每2分钟使用计划任务每2分钟进行大量查询。此查询包含产品数据。此数据在AJAX中使用,要求自动完成逻辑,这是缓存的主要原因,因为每次运行需要几秒钟。

在应用程序中,有几个页面从此查询结果中查询。

。 这些查询的

使用类似条件来过滤结果。但是,查询是返回不符合条件的记录。为什么会发生这种情况,我该如何预防?

我的缓存查询:

<cfquery name="qProducts" datasource="#APPLICATION.DataSource#">
    SELECT
        P.SKU
        P.DESC,
        P.TITLE,
        P.KEYWORDS,
        X.ATTR1
    FROM    PRODUCTS P
        LEFT JOIN PRODUCTSEXT X
            ON P.SKU = X.EXTSKU
    WHERE   P.ACTIVE = 1
</cfquery>

我的过滤器查询:

<cfquery name="_qFilteredProducts" dbtype="Query">
    SELECT
        SKU
        DESC,
        TITLE,
        KEYWORDS
    FROM    qProducts
    WHERE   1 = 1
        AND (
                DESC LIKE '%#searchstring#%'
            OR  TITLE LIKE '%#searchstring#%'
            OR  KEYWORDS LIKE '%#searchstring#%'
            OR  ATTR1 LIKE '%#searchstring#%'
            )
</cfquery>

所以,假设我传递了searchstring的"金"值。

我看到的结果如下:

SKU               DESC                TITLE         KEYWORDS
-------------------------------------------------------------------------------
ABC               GOLD KEY            GOLD KEY      GOLD KEY SHINY
DEF               SILVER KEY          SILVER KEY    SILVER KEY SHINY

我不应该看到第二个记录。

我想我通过在互联网上进行更多研究来弄清楚这一点。我的原始查询实际上包含一个左键,并且Coldfusion QoQ中的类似子句倾向于完全忽略零值,因此我只需要更新我的原始/数据库查询即可将所有NULL值更改为空字符串。

<cfquery name="qProducts" datasource="#APPLICATION.DataSource#">
    SELECT
        P.SKU
        P.DESC,
        P.TITLE,
        P.KEYWORDS,
        IFNULL(X.ATTR1, '')
    FROM    PRODUCTS P
        LEFT JOIN PRODUCTSEXT X
            ON P.SKU = X.EXTSKU
    WHERE   P.ACTIVE = 1
</cfquery>

最新更新