Создание выделенных результатов в Coldfusion

У меня есть вывод из таблицы, которую я хочу выделить, если определенное требование не будет выполнено. У меня он отлично работает для одного раздела, но затем, когда я использую код в 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>
        ....

person CarolaV    schedule 17.07.2018    source источник
comment
Я заметил, что запрос сравнивает subID с идентификатором компании: ...AND companies.subID=#session.auth.companyID#. Это опечатка?   -  person SOS    schedule 18.07.2018
comment
@Ageax не опечатка - таблица компаний содержит subID столбца, по которому мы определяем, принадлежит ли компания к определенной группе. т.е. Company2 принадлежит к группе компаний, которые подчиняются Company1. Надеюсь, это имеет смысл.   -  person CarolaV    schedule 19.07.2018
comment
Ах, отношения родитель/ребенок. Это имеет смысл.   -  person SOS    schedule 19.07.2018


Ответы (1)


Это много для переваривания без каких-либо образцов данных, но я попробую :) Я думаю, проблема в том, что код сравнивает яблоки и апельсины. Запрос "sub" содержит сведения об отдельных компаниях и subId. (Я понятия не имею, как выглядят реальные данные, поэтому примеры ниже приведены только для иллюстрации)

Сведения о компании

Однако при cfif сравнениях вычисляется общая сумма для всех компаний и субидентификаторов. Таким образом, если общая сумма для O20 (O18 и т. д.) отрицательна, то она будет отрицательной для каждой компании в cfoutput.

Итоги компании

Пример работы TryCF.com

Если все, что вам нужно, это итоги по companyId и subId, гораздо проще вычислить это в SQL. Вместо всех ValueList(), ArraySum() и QoQ используйте агрегатную функцию SQL SUM(). Я не знаю, какую СУБД вы используете, но что-то вроде этого должно работать практически в любой базе данных:

Примечание. Я "догадался", что квартальный идентификатор является столбцом в таблице suppresult_old

<!--- 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 используйте рассчитанную сумму:

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

Кроме того: если вы новичок в S.O., возможно, стоит взглянуть на как создать минимальный, полный, и Поддающийся проверке пример. Объединение (наименьшего возможного) автономного примера, демонстрирующего проблему, значительно упрощает помощь другим, и менее вероятно, что вопрос будет closed как слишком широкий :) Кроме того, такие инструменты, как https://trycf.com и https://sqlfiddle.com отлично подходят для обмена работающими примерами.

person SOS    schedule 18.07.2018
comment
Большое спасибо @Ageax! Это сработало отлично, и спасибо за ваше объяснение. Я бился головой о ноутбук. Я также посмотрю ссылки, которые вы предоставили. - person CarolaV; 19.07.2018