データのグラフ化
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;