PHPでDB操作(16)
次に、人口の都道府県ランキングを作成します。コードは以下の通り。
<?php
$dsn =DBNAME;
$user =USER;
$pass =PASSWORD;
$dbh = new PDO($dsn, $user, $pass);
$sql="SELECT * FROM population WHERE shi = '-' ORDER BY total DESC";
$stmt = $dbh->prepare($sql);
$stmt->execute();
$stmt_lst=$stmt->fetchALL(PDO::FETCH_ASSOC);
$i=0;
echo '<h2>都道府県人口ランキング</h2><hr><table><tr><th style="background-color:black;color:white;width:70px;height:50px;">No.</th><th style="background-color:black;color:white;width:250px;height:50px;">都市名</th><th style="background-color:black;color:white;width:250px;height:50px;">男性人口</th><th style="background-color:black;color:white;width:250px;height:50px;">女性人口</th><th style="background-color:black;color:white;width:250px;height:50px;">合計</th><tr>';
foreach ($stmt_lst as $stmt) {
$i=$i+1;
echo '<tr>';
echo '<td style="background-color:lightgrey;height:50px;text-align:center;">' . $i .'</td>';
echo '<td style="background-color:lightgrey;height:50px;text-align:center;">' . $stmt['ken'] . '</td>';
echo '<td style="background-color:lightgrey;height:50px;">' . $stmt['male'] . '</td>';
echo '<td style="background-color:lightgrey;height:50px;">' . $stmt['female'] . '</td>';
echo '<td style="background-color:lightgrey;height:50px;">' . $stmt['total'] . '</td></tr>';
}
echo '</table>';
?>
キモは9行目の右辺です。
SELECT * FROM population WHERE shi = '-' ORDER BY total DESC
特にWHERE以降の文に着目です。今、ランキングにしたいのは都道府県のみなので、市町村名は必要ありません。よって、populationデータベースの市町村名のフィールドが ' -'になっているものを取り出します。
その取り出した後で、ORDER BYで並べ替えをします。何をキーに並べ替えるかはORDER BYの後のtotal、つまり合計人口で並べ替え、DESCのオプションは降順を意味します。
これで降順の都道府県人口ランキングが取り出せるわけですが、これをみえる形にしなければいけません。それが11行目以降になります。
まずprepare関数でSQL文を実行する準備したものを変数$stmtに代入後、変数$stmtをexecute関数で実行します。その実行したものを13行目で$stmt_lstに代入するわけですが、これがfetch(PDO::FETCH_ASSOC)ということになります。
fetch(PDO::FETCH_ASSOC)に関しては以下が詳しい。
要するに、2次元配列として変数に代入される仕組みとなっています。その配列変数の中身を取り出すために、foreach文を回していくわけです。なお、変数$iは順位付けのために定義したものです。これでランキング表が出来上がるわけです。この要領で、市町村別のランキングも可能です。
