-1

MySQL データに基づいて配列のハッシュを生成するプログラムがあります。各配列には数値が含まれています。Perl を使用して、各配列のエントロピーを生成し、結果を別の MySQL テーブルに出力するにはどうすればよいですか? 新しいテーブルには次の列が含まれている必要があります。

 ID         Array           Entropy
 -----      -----           -----
 1          topic(key)      entropy of all values belonging to the topic

配列のハッシュを生成する現在のプログラムは次のとおりです。

my %values_by_topic; 
my $sth = $dbh->prepare('SELECT Topic, Value FROM Table'); 
$sth->execute(); 
while (my $row = $sth->fetch()) {    
   my ($topic, $value) = @$row;     
   push @{ $values_by_topic{$topic} }, $value; 
}
4

1 に答える 1

1

あなたは2つの質問をしました:

  • 各配列のエントロピーを生成するにはどうすればよいですか?
  • 別の MySQL テーブルに結果を出力するにはどうすればよいですか?

1つ目は、あなたが私たちに伝え、私たちがあなたの実装を支援することです.

2番目は以下に答えます。

my $sth_select = $dbh->prepare('
   SELECT Topic,
          Value
     FROM Table1
    ORDER BY Topic
');

my $sth_insert = $dbh->prepare('
   INSERT INTO Table2
             Topic,
             Entropy
          ) VALUES (
             ?, ?
          )
');

my $last_topic;
my @values;
$sth_select->execute();
while (my $row = $sth_select->fetch()) {
    my ($topic, $value) = @$row;

    if (@values && $topic ne $last_topic) {
        my $entropy = calculate_entropy(@values);
        $sth_insert->execute($last_topic, $entropy);
        @values = ();
    }

    $last_topic = $topic;
    push @values, $value;
}

if (@values) {
    my $entropy = calculate_entropy(@values);
    $sth_insert->execute($last_topic, $entropy);
    @values = ();
}

ノート:

一部のデータベースでは、特定のデータベース ハンドルに対して 2 つのステートメント ハンドルを開くことができません。MySQL がそのような場合は、2 つのデータベース ハンドルを作成するだけです。

ロックとトランザクションは、読者の課題として残されています。(または、誰かが編集できます。)

于 2012-09-20T20:06:34.420 に答える