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は順位付けのために定義したものです。これでランキング表が出来上がるわけです。この要領で、市町村別のランキングも可能です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です