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>

введите здесь описание изображения

Как я могу обнаружить тех, у кого одинаковый код акции?


person DCYılmaz    schedule 12.04.2021    source источник
comment
Вы можете забыть о массивах и использовать Query of Queries, чтобы определить, какие биржевые коды появляются более одного раза.   -  person Dan Bracuk    schedule 12.04.2021
comment
Вы можете использовать ArrayFind/FindNoCase с функцией закрытия, но это кажется немного тяжеловесным. Как насчет выполнения агрегации в SQL? Какой у вас запрос dbms и sql?   -  person SOS    schedule 12.04.2021


Ответы (2)


Вы можете попробовать использовать метод запрос запросов с функцией 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, "stok_kod", "5678");
    querySetCell(getStocks, "stok", "10");
    queryAddRow(getStocks);
    querySetCell(getStocks, "stok_kod", "1234");
    querySetCell(getStocks, "stok", "30");
</cfscript>

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

<cfdump var="#newQuery#">

ВЫВОД

Вывод результата

person Khoa Nguyen    schedule 21.04.2021

Я бы посоветовал вам иметь одну переменную, которая будет содержать список ваших различных кодов акций.

Пример: <cfset lst_stok_kod = "a,b,c,d"> Возможно, из вашего SQL-запроса.

После этого вы можете использовать функцию ArrayFindNoCase, чтобы проверить, присутствует ли в вашем массиве этот стандартный код или нет. Если вы найдете его более одного раза, вы каждый раз увеличиваете количество акций.

person akashb    schedule 30.04.2021