2012-03-06 6 views
2

これは何と呼ぶべきかわからないが、このタイトルは、私が思うように、私が必要とするものとほぼ同じである!ColdFusionの増加数カウント

基本的には、提供された情報の量に基づいて、より多くのエントリーを競技者に割り当てる競技会を設定しました。私はわかりませんが、私は説明しようとしましょう。私達のデータベースで

Name | Number of Entries 
''''''''''''''''''''''''  
Josh |  3 
Mike |  3 
Pat |  1 
Raul |  2 

のようなものがあるでしょうがあり、もちろん、データベース内のこれ以上の情報は、ですが、これは簡易版です。

私はそれがやりたいことは、彼らが持っているどのように多くのエントリに基づいて値を割り当て、データベースを更新するいくつかのコードを実行することで、すなわち

Name | Number of Entries | Raffle Number(s) 
''''''''''''''''''''''''''''''''''''''''''' 
Josh |  3   |  1, 2, 3 
Mike |  3   |  4, 5, 6 
Pat |  1   |   7 
Raul |  2   |  8, 9 

などなどだから、コードは、彼らはどのように多くのエントリを読み取りこの最後の値に基づいて増加するこの値をデータベースに挿入します。

さらに詳しい説明が必要な場合はお知らせください。

答えて

2

多分これが後に何your'reです:;-)あなたがこれを必要とする理由私は得ることはありませんが、それは答えである可能性が

<CFQUERY name="qGetStats" datasource="#yourdsn#"> 
    SELECT id,number_of_entries 
    FROM mytable 
</CFQUERY> 
<CFSET counter = 1 /> 
<CFLOOP query="qGetStats"> 
    <CFSET dummy = "" /> 
    <CFLOOP from="#counter#" to="#counter+qGetStats.number_of_entries-1#" index="idx"> 
     <CFSET dummy = listappend(dummy,idx) /> 
    </CFLOOP> 
    <CFQUERY datasource="#yourdsn#"> 
     UPDATE mytable 
     SET 
     raffle_numbers = <CFQUERYPARAM value="#dummy#" cfsqltype="cf_sql_varchar" /> 
     WHERE id = <CFQUERYPARAM value="#id#" cfsqltype="cf_sql_integer" /> 
    </CFQUERY> 
    <CFSET counter = counter + qGetStats.number_of_entries /> 
</CFLOOP> 

+2

はい!これは驚くほどうまく動作します、ありがとうございます。 :Dこれは、私たちが乱数生成器から勝者を選ぶ必要があるので、これを行う必要があります。これにより、私にはどのラッフル番号がどの人に対応しているかを知ることができます!再度、感謝します! :) –

+3

@ジョシュア - 区切られた値を保存すると、通常頭痛につながります。たとえば、抽選番号 '5'のオーナーはどうですか?可能ですが、SQLは扱いにくくエラーが発生しやすいです。より柔軟で信頼性の高い構造は、それぞれの 'NameID'と' RaffleNumbers'を別々のレコードとして格納する3番目のテーブルを作成することです。 – Leigh

+0

私は対応する行を見つけるためにデータベースを調べますか?または、それらをCSVにダンプし、手動で見つける。データリストは巨大ではないので、勝者のチケット所有者を手動で探すことは完全に実行可能です。私はもっ​​と大きなリストを持っていれば別にそれをやらなければならないかもしれないと理解していますが、少なくとも、勝利記録を手動で見つけることは十分容易であるため、これは必ずしも必要ではありません。これは、手作業で抽選番号を割り当てる時間を節約しました。私はあなたの質問を理解したと思うが、そうでなければ、私に教えてください! –

2

私は間違いにテーブルを作成しますエントリを保持し、別のものは抽選番号を保持する。あなたのコードはより簡単になり、必要に応じてより多くのデータを利用することができます。

数字を増やす代わりに、各エントリのラッフル番号を格納するテーブルに新しいレコードを挿入するだけです。これはあなたのデータベースでもう少しスペースを使いますが、より多くのデータとより簡単なコードを持つことになります。

それからちょうどあなたがコメントで思いついたサンプルをアドレッシング

SELECT EntryID, EntryName 
     (
      SELECT count(*) 
      FROM rafflenumbers 
      WHERE rafflenumbers.EntryID = entries.EntryID 
     ) AS NumberOfEntries 
FROM entries 

を説明するように、あなたは、簡単に5

のラッフル番号を持つエントリを見つけることができるデータを取得するために、次のコードを使用します
SELECT  EntryID 
FROM  entries 
INNER JOIN rafflenumbers 
    ON  entries.EntryID = rafflenumbers.EntryID 
WHERE  rafflenumbers.Number = 5 
+0

これは基本的に私がやる方法です(つまり、自動増分として 'RaffleNumber'を設定するので、自動的に数字が生成されます)。私がリストを使用した数回、私はいつもそれを後悔してしまった。 – Leigh