我有一个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>