Coldfusion 如何检测数组中的重复变量

问题描述

我用 cfloop数据库提取一个循环。将此循环转移到数组后,如果存在相同的数组,我想增加股票数量

<cfoutput query="getStocks">
    <cfif #CurrentRow# lt 5> 
        <cfscript>
            c=#CurrentRow#;
            if (c==1){
                arr[c]['stok_kod']='#STOCK_CODE#';
                arr[c]['lot']='#LOT_NO#';
                arr[c]['stok']=#STOK_MIKTARI#;
                arr[c]['depo']='#DEPO#';
                arr[c]['isim']='#PRODUCT_NAME#';
                arr[c]['skt']='#GET_SKT.DELIVER_DATE#';
            }
            for (i=1; i <= arrayLen(#arr#);i++) {
                if (arr[i]['stok_kod'] eq '#STOCK_CODE#' ){
                    arr[i]['stok']+=#STOK_MIKTARI#;
                }else{
                    arr[c]['stok_kod']='#STOCK_CODE#';
                    arr[c]['lot']='#LOT_NO#';
                    arr[c]['stok']=#STOK_MIKTARI#;
                    arr[c]['depo']='#DEPO#';
                    arr[c]['isim']='#PRODUCT_NAME#';
                    arr[c]['skt']='#GET_SKT.DELIVER_DATE#';
                }
            }
        </cfscript>
    </cfif>
</cfoutput>

enter image description here

我如何检测那些具有相同股票代码的人?

解决方法

您可以尝试使用带有GROUP BY函数的查询查询方法

这是它如何工作的示例。

<cfscript>
    getStocks = queryNew("stok_kod,stok","varchar,integer");
    queryAddRow(getStocks);
    querySetCell(getStocks,"stok_kod","1234");
    querySetCell(getStocks,"stok","-10");
    queryAddRow(getStocks);
    querySetCell(getStocks,"5678");
    querySetCell(getStocks,"10");
    queryAddRow(getStocks);
    querySetCell(getStocks,"30");
</cfscript>

<cfquery name="newQuery" dbtype="query">
  SELECT stok_kod,SUM(stok) as stok
  FROM getStocks
  GROUP BY stok_kod
</cfquery>

<cfdump var="#newQuery#">

输出

Result output

,

我建议您使用一个变量来列出您的不同股票代码。

示例:<cfset lst_stok_kod = "a,b,c,d"> 可能来自您的 SQL 查询。

之后,您可以使用 ArrayFindNoCase 函数检查您的数组是否存在该股票代码。如果你发现它不止一次,你每次都会增加股票数量。