1

我试图解决一个烦人的查询问题。

<cfset url.qty = "61000">
<cfset url.pages = "16">
<cfquery name="getCosts" datasource="#request.DSN#">
        SELECT ID, publication,pages,quantity, cover, cost, run_ons,run_backs, stock
        FROM calculator_data
        WHERE publication = <cfqueryparam cfsqltype="cf_sql_varchar" value="#url.publication#">
            <cfif url.qty IS NOT "">
            AND quantity = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.qty#">
            </cfif>
            <cfif url.pages IS NOT "">
            AND pages = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.pages#">
            </cfif>
        </cfquery>

我想做的是传递一个说法

61000 然后检索最接近的值,这样我就可以通过冷融合进行一些额外的计算。

我在数据库中有大约每 10,000 个存在的范围,所以当我使用上面的代码查询时,我得到的只是一个空的查询对象。

所以理想情况下,如果我查询它是 61,000,我希望取回 60,000,那么我可以将它用作我的基础进行额外计算

关于如何获得与我查询的值最接近的数字的任何想法?

提前致谢

4

2 回答 2

3

我对 ColdFusion 一无所知,但我认为这应该可行。我无法理解应该与哪一列 61000 匹配。所以我以qty作为示例列名。只需使用您的真实专栏而不是数量

SELECT TOP 1 * FROM [calculator_data] 
Where qty < 61000
ORDER BY qty Desc
于 2013-09-18T05:07:27.787 回答
0

试试这个:

<cfset url.qty = "61000">
<cfset url.pages = "16">
<cfquery name="getCosts" datasource="#request.DSN#">
    SELECT ID, publication,pages,quantity, cover, cost, run_ons,run_backs, stock
    FROM calculator_data
    WHERE publication = <cfqueryparam cfsqltype="cf_sql_varchar" value="#url.publication#">
        <cfif url.qty IS NOT "">
        AND quantity < <cfqueryparam cfsqltype="cf_sql_integer" value="#url.qty#">
        </cfif>
        <cfif url.pages IS NOT "">
        AND pages = <cfqueryparam cfsqltype="cf_sql_integer" value="#url.pages#">
        </cfif>
    </cfquery>

以下行已更改:

AND quantity < <cfqueryparam cfsqltype="cf_sql_integer" value="#url.qty#">
于 2013-09-18T08:31:14.767 回答