在 Coldfusion 中创建突出显示的结果

Creating highlighted results in Coldfusion

我有来自 table 的输出,我希望在未满足特定要求时突出显示。我让它在一个部分工作正常,但是当我在两个 table 的内部连接后在 QofQ 上使用代码时,它不起作用。

当我转储变量时,我可以看到它们是正确的,而且我 100% 知道其中一家公司不包含负面数据,因此应该正确显示,但两家公司都显示为红色。

我显然没有看到任何东西,或者 QofQ 是否有导致这种情况的限制?

我还在学习,请多关照:)

查询:

<cfquery name="suppNeg" datasource="users">
    SELECT companies.subID, companies.companyID, companies.suppName
         , suppresult_old.companyID, suppresult_old.O18, suppresult_old.O19
         , suppresult_old.O20, suppresult_old.O22, suppresult_old.WDPVC1
         , suppresult_old.WDPVC2, quarterID
    FROM suppresult_old INNER JOIN companies
           ON suppresult_old.companyID=companies.companyID
    WHERE quarterID = 8
    AND   companies.subID = #session.auth.companyID#
    ORDER BY companies.suppName ASC

</cfquery> 

 <cfquery dbtype="query" name="subs">
    SELECT  DISTINCT suppName, companyID, subID
    FROM    suppNeg
    ORDER BY suppName ASC
</cfquery>


   <cfquery name="columntotals" datasource="users">
    SELECT O18,O19,O20,O22, WDPVC1, WDPVC2
    FROM   suppresult_old INNER JOIN companies
              ON suppresult_old.companyID=companies.companyID
    WHERE  quarterID = 8
    AND    companies.subID = #session.auth.companyID#
</cfquery>

<cfset O18Value = valueList(columntotals.O18) />
<cfset O18total = listToArray(O18Value) />
<cfset O19Value = valueList(columntotals.O19) />
<cfset O19total = listToArray(O19Value) />
<cfset O20Value = valueList(columntotals.O20) />
<cfset O20total = listToArray(O20Value) />
<cfset O22Value = valueList(columntotals.O22) />
<cfset O22total = listToArray(O22Value) />

<cfset WDPVC1Value = valueList(columntotals.WDPVC1) />
<cfset WDPVC1total = listToArray(WDPVC1Value) />

<cfset WDPVC2Value = valueList(columntotals.WDPVC2) />
<cfset WDPVC2total = listToArray(WDPVC2Value) /> 



<cfquery name="suppliers" datasource="users">
    SELECT suppName, companyID, subID
    FROM companies
    WHERE subID=#session.auth.companyID#
    ORDER BY suppName ASC

</cfquery>

输出:

<cfoutput query="subs">
    <div class="container" width="1100">
        <div class="row">
        <a href="2tierReport.cfm?quarterID=8&companyID=#companyID#">
        <cfif (arraysum(O18total)) LT 0>
            <div class ="col-sm-4 supphighlight1">
                <h4>

                     <span class="glyphicon glyphicon-exclamation-sign" style="color:##ffffff; font-size: 32px; vertical-align: middle;" aria-hidden="true"></span><strong> &nbsp; &nbsp;#subs.suppName#</strong></a>
                </h4> 
            </div>
            </a>
            <a href="2tierReport.cfm?quarterID=8&companyID=#companyID#">
            <cfelseif (arraysum(O19total)) LT 0>
            <div class ="col-sm-4 supphighlight1">
                <h4>
                     <span class="glyphicon glyphicon-exclamation-sign" style="color:##ffffff; font-size: 32px; vertical-align: middle;" aria-hidden="true"></span><strong> &nbsp; &nbsp;#subs.suppName#</strong>
                </h4>
            </div>
                </a>
                <a href="2tierReport.cfm?quarterID=8&companyID=#companyID#">
            <cfelseif (arraysum(O20total)) LT 0>
            <div class ="col-sm-4 supphighlight1">
                <h4>
                     <span class="glyphicon glyphicon-exclamation-sign" style="color:##ffffff; font-size: 32px; vertical-align: middle;" aria-hidden="true"></span><strong> &nbsp; &nbsp;#subs.suppName#</strong>
                </h4> 
                </div>
                </a>

                <a href="2tierReport.cfm?quarterID=8&companyID=#companyID#"> 
            <cfelseif (arraysum(O22total)) lt 0>
            <div class ="col-sm-4 supphighlight1">
                <h4>
                     <span class="glyphicon glyphicon-exclamation-sign" style="color:##ffffff; font-size: 32px; vertical-align: middle;" aria-hidden="true"></span><strong> &nbsp; &nbsp;#subs.suppName#</strong>
                </h4>
                    </div>
                </a> 
                <a href="2tierReport.cfm?quarterID=8&companyID=#companyID#">    
            <cfelseif (arraysum(WDPVC1total)) LT 0>
            <div class ="col-sm-4 supphighlight1">
                <h4>
                     <span class="glyphicon glyphicon-exclamation-sign" style="color:##ffffff; font-size: 32px; vertical-align: middle;" aria-hidden="true"></span><strong> &nbsp; &nbsp;#subs.suppName#</strong>
                </h4>
            </div>
            </a>
                <a href="2tierReport.cfm?quarterID=8&companyID=#companyID#">
            <cfelseif (arraysum(WDPVC2total)) LT 0>
            <div class ="col-sm-4 supphighlight1">
                <h4>
                     <span class="glyphicon glyphicon-exclamation-sign" style="color:##ffffff; font-size: 32px; vertical-align: middle;" aria-hidden="true"></span><strong> &nbsp; &nbsp;#subs.suppName#</strong>
                </h4>
            </div>
                </a>

            <cfelse> 
        <a href="suppReports_admin.cfm?quarterID=8&companyID=#companyID#">
            <div class ="col-sm-4 supphighlight">
                <h4>
                     <span class="glyphicon glyphicon-ok-circle" style="color:##ffffff; font-size: 32px; vertical-align: middle;" aria-hidden="true"></span><strong> &nbsp; &nbsp;#subs.suppName#</strong>
                </h4>
            </div>
        </a>
        ....

需要消化的内容很多,没有任何数据样本,但我会尝试一下 :) 我认为问题在于代码正在比较苹果和橘子。 "sub" 查询包含 个人 公司和 subId 的详细信息。 (我不知道真实数据是什么样的,所以下面的示例只是为了说明)

但是,cfif 比较计算了 所有 公司和 subId 的总和。因此,如果 O20(O18 等)的总计为负,那么 cf 输出中的每家公司都将为负。

Runnable TryCF.com Example

如果您只需要总计,按 companyId 和 subId,在 SQL 中计算起来要容易得多。使用 SQL 聚合函数 SUM(),而不是所有 ValueList()ArraySum() 和 QoQ。我不知道你使用的是哪个 DBMS,但类似这样的东西应该适用于大多数数据库:

注:我"guessed"那个quarterID是suppresult_oldtable

中的一列
<!--- NOT TESTED --->
<cfquery name="totalsByCompany" datasource="users">
    SELECT companies.subID
          , companies.companyID
          , companies.suppName
          , suppresult_old.quarterID
          , SUM(suppresult_old.O18) AS O18Total
          , SUM(suppresult_old.O19) AS O19Total
          , SUM(suppresult_old.O20) AS O20Total
          , SUM(suppresult_old.O22) AS O22Total
          , SUM(suppresult_old.WDPVC1) AS WDPVC1Total
          , SUM(suppresult_old.WDPVC2) AS WDPVC2Total
    FROM suppresult_old 
          INNER JOIN companies ON suppresult_old.companyID=companies.companyID
    WHERE suppresult_old.quarterID = 8
    AND   companies.subID= <cfqueryparam value="#session.auth.companyID#" cfsqltype="cf_sql_integer">
    GROUP BY companies.subID
          , companies.companyID
          , companies.suppName
          , suppresult_old.quarterID
    ORDER BY companies.suppName ASC
</cfquery> 

然后在您的 cfoutput 中,使用计算出的 SUM:

<cfoutput query="totalsByCompany">
    .... 
    <cfif O18total LT 0> .... code here
    <cfelseif O19total LT 0>.... code here
    <cfelse> ...
    </cfif>
</cfoutput>

旁白: 如果您是 S.O 的新手,可能想看看 How to create a Minimal, Complete, and Verifiable example. Putting together (the smallest possible) self-contained example demonstrating the problem makes it a LOT easier for others to assist, and less likely the question will be closed as too broad :) Also, tools like https://trycf.com and https://sqlfiddle.com 非常适合共享可运行的示例。