初心者だけどPerlが大好き

コードが世界を変える!

データのグラフ化  

MySQL で GROUP BY を使用すると結果がソートされます。
また、GROUP BY リストに指定したカラムに明示的な ASC または
DESC キーワードを付けることによって、
個々のカラムのソート順序を指定できます
デフォルトのソート順序は昇順で、
小さい値が大きい値よりも先に表示されます。
逆の順序(降順)でソートするには、
ソートするカラムの名前に DESC キーワードを付けます。


10ピクセル■の a.jpgを作成してくださいね

graph.cgi

#!D:/xampp/perl/bin/perl
use utf8;
use CGI;
use DBI;
$q = new CGI;
print $q->header(-type =>'text/html',-charset => 'utf-8'),
$q->start_html(-title=>"Database Form"),
$q->h1(' 年齢グラフです');
$dbname = "trinity777";
$user = "root";
$passwd = "あなたのパスワード";
$tbname = "trinity888";
$host = "localhost";
# DBに接続
$dbh=DBI->connect("DBI:mysql:$dbname; host=$host", $user, $passwd) 
or die $DBI::errstr;
$dbh->do("SET NAMES utf8");
# 検索条件に該当する全データの件数取得
$sth = $dbh->prepare(" SELECT count(*) FROM $tbname ");
if(!$sth->execute){print "SQL失敗\n";exit;}
@rec = $sth->fetchrow_array();
$all_num=$rec[0];
#SQL実行
$sth = $dbh->prepare(" SELECT age,count(*) AS cnt FROM  $tbname GROUP BY age   ORDER BY cnt DESC,age");
if(!$sth->execute){print "SQL失敗\n";exit;}
print $q->start_table({-border=>1}),
"全件@rec",
$q->start_Tr,
$q->th(['年齢', '人数','グラフ']);
while (@rec = $sth->fetchrow_array())
{
$percent=$rec[1]/$all_num*100;
$p=int(
($percent*10)+0.5)/10;
print $q->start_Tr,
$q->td([$rec[0],$rec[1]]),
$q->td,
$q->img({-src=>'a.jpg', -height=>'10',-width =>"$percent*2"},
"$p%"),
$q->end_td;
}
# ステートメントハンドルクリア
$sth->finish;
# DB切断
$dbh->disconnect;
print $q->end_html;