У меня есть приложение ColdFusion 8, которое кэширует большой запрос каждые 2 минуты с помощью запланированной задачи. Этот запрос содержит данные о продуктах. Эти данные используются в вызовах AJAX для автозаполнения логики, что является основной причиной ее кэширования, поскольку каждый раз требуется несколько секунд.Почему я получаю ошибочные записи в Query-of-Queries с условиями LIKE?
В приложении есть несколько страниц, которые запрашивают этот результат запроса с помощью Query-of-Queries.
В этих запросах используется условие LIKE для фильтрации результатов. Однако запрос возвращает записи, которые не соответствуют условиям. Почему это происходит и как я могу это предотвратить?
Мои Cached Запрос:
<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
Я не должен видеть, что второй альбом.
FWIW, а не только QoQ's. 'LIKE' должен всегда игнорировать нулевые значения в любой стандартной базе данных. «Null» считается неизвестным, поэтому он никогда не равен никому, даже другому «null». Любое прямое сравнение «null» ('=', 'like', etcetera) всегда будет возвращать false. – Leigh