我有一些旧代码,其中一个页面的查询速度非常慢。因为它们非常相似(几乎相同),所以引起了我的注意。唯一的区别是WHERE CLAUSE
中的一行。这是示例:
-- Query 1
SELECT * -- Just for testing purpose I use *
FROM Table 1
WHERE rec_id = #selected_id#
<cfif userid is not "6">
AND store_id = '#url.storedid#' -- I do not use cfqueryparam for testing purpuse
</cfif>
-- Query 2
SELECT * -- Just for testing purpose I use *
FROM Table 1
WHERE rec_id = #selected_id#
<cfif userid is not "6">
<cfif session.market_id is 4>
AND store_id IN ('01','02','03')
<cfelse>
AND store_id = '#url.storedid#'
</cfif>
</cfif>
如您所见,这两个查询之间的唯一区别是在WHERE
块内的cfif
子句中。我想知道是否有办法将这两个查询合而为一?用来检查两个结果集之间差异的唯一列是TOTAL
列。如果有人对如何实现这一目标有任何想法,请告诉我。谢谢。
答案 0 :(得分:0)
这不一定是最好的方法,但是它将回答您所问的问题,即如何通过单个查询实现相同的逻辑。
SELECT * -- Just for testing purpose I use *
FROM Table 1
WHERE rec_id = #selected_id#
<cfif userid is not "6" and session.market_id is 4>
AND store_id IN ('01','02','03')
<cfelseif userid is not "6">
AND store_id = '#url.storedid#'
</cfif>
请记住,这种方法的逻辑略有不同,因为只有一个查询变量。这些注释表明,在这种情况下,您可能需要两个变量。
Query1是您的问题中的第一个。
<cfif userid is not "6" and session.market_id is 4>
<cfquery name = Query2 dbtype="query">
select *
from Query1
where store_id IN ('01','02','03')
</cfquery>
<cfelse>
<cfset Query2 = Query1>
</cfif>