2016-08-12 18 views
0
items = structNew(); 
for (row in combo) { 
    //items['#row.ProdName#']['#row.SIZELONG#']['#row.COLOR#'] ++; 
    items['#row.PRODID#']['#row.SIZEID#']['#row.COLORID#'] ++; 
} 

私は、各製品の数、各サイズ、色などの数を把握しようとしています。PHPでは、上記のコード(本質的に)が機能します。しかし、CFが不満を言っている構造体をインクリメントする方法は?関連性のあるアレー

"Element SOMESKU is undefined in a CFML structure referenced as part of an expression. 

私はisDefinedでテストを続けて定義する必要がありますか?

+0

「++」とは何ですか? – Leeish

+1

また、何を達成しようとしていますか?構造体はキーと値のペアです。あなたのコードは、あなたが配列を作成しようとしているように見えます。 'コンボ'には配列が含まれていますか? – Leeish

+0

合意。たぶん、いくつかのステップをバックアップし、1)「コンボ」が表すものとそれがどのように埋め込まれ、2)そのデータのサンプルを投稿するのかを説明してください。コードを動作させることはおそらく可能ですが、より良いオプションがあるかもしれません。 – Leigh

答えて

3

あなたはちょうどあなたがショーを持っているコードを使用すると、これは、私はあなたがかもしれないものだと思い、カウントしようとしている場合:だから

items = structNew(); 
for (row in combo) { 
    if(
     !structKeyExists(items,row.PRODID) || 
     !structKeyExists(items[row.PRODID],row.SIZEID) || 
     !structKeyExists(items[row.PRODID][row.SIZEID],row.COLORID) 
    ){ 
     items['#row.PRODID#']['#row.SIZEID#']['#row.COLORID#'] = 1 
    } else { 
     items['#row.PRODID#']['#row.SIZEID#']['#row.COLORID#']++; 
    } 
} 

、構造体のどの部分ならば、私たちがやっていることは、言っています必要なものは存在せず、作成して値を1にします。それ以外の場合は、値を増やします。構造体の他の部分はテストするために存在しないため、3番目のORを単独で行うことはできません。

これを行うにはより良い方法があるかもしれませんが、これはおそらくあなたの質問に基づいてあなたにとって最も理にかなっています。

items = structNew(); 
for (row in combo) { 
    if(
     !structKeyExists(items,row.PRODID) 
    ){ 
     items['#row.PRODID#'] = { 
      color: row.COLORID, 
      size: row.SIZEID, 
      qty: 1 
     } 
    } else { 
     items['#row.PRODID#']['qty']++; 
    } 
} 

2番目の例は、各製品IDがカラー/サイズの組み合わせに固有のものである場合にどのように進んでいるかと思います。次に、それぞれitemは、3つの値、すなわちcolor, size, and quantityでそれを記述する構造体になります。私はどのように多くのCDとどのように多くのどのようなサイズの、色を追加する必要が

+0

これはすべてあなたのデータフォーマットに依存します。ハッシュマップを使用することもできます。ハッシュマップはおそらくさらに速くなりますが、 'combo'データがどのように見えるかはわかりません。 – Leeish

2

、Tシャツ

の設計 は一般的に、代わりにクエリを使用する方が簡単で効率的です。データベースは、集計データなどのタスク用に特に最適化されています。作業をデータベースエンジンにオフロードすることで、最終的に破棄される余分なデータではなく、必要なデータのみを返すことによってループの必要性を排除し、帯域幅を節約します。

テーブル構造やDBMSを知らなくても、特定のクエリのアドバイスを提供するのは難しいです。しかし、本質的に必要とされるのは、少数の列を選択し、順序付けられた量または列のcount(*)のいずれかで集計することだけです。正確なSQLはテーブル構造に依存しますが、一般的な考え方は次のようなものです:

SELECT ProdID 
     , ProdName 
     , SizeID 
     , ColorID 
     , SUM(Quantity) AS TotalItems 
FROM .... Your table(s) .... 
WHERE ..... 
GROUP BY 
     ProdID 
     , ProdName 
     , SizeID 
     , ColorID 
関連する問題