園田うき公式blog ホーム » 雑記 »上坂すみれの服データベース制作日記 その3

上坂すみれの服データベース制作日記 その3  

 久々に更新した。
 Sumire Uesaka Clothes Info

--

 今回は特定の年のレコードのみを抽出する機能を実装しました。
 まず年数のプルダウンメニューを作るところから始めたのですが、単純に

<option value = ""></option>
<?php
for ($i = 2011 ; $i <= 2016 ; $i++){
?>
<option value = "<?=htmlspecialchars($i)?>"><?=htmlspecialchars($i)?>年</option>
<?php
}
?>

 のように書くと、来年になった時に困ったりとか、もしレコードがない年があった時どうすんだとか、そもそもマジックナンバーが~とか色々問題あるので、SQLの最古・最新レコードから年を取得しました。
 まず、最古・最新のレコードを抽出するSELECT文ですが、これは簡単でした。

try {
$get_min_year_sql = 'SELECT MIN(date) FROM clothes_table';
$get_min_year_stmh = $pdo->prepare($get_min_year_sql );
$get_min_year_stmh->execute();
} catch (PDOException $e) {
echo 'DBにアクセスできません' . $e->getMessage();
try {
$get_max_year_sql = 'SELECT MAX(date) FROM clothes_table';
$get_max_year_stmh = $pdo->prepare($get_max_year_sql);
$get_max_year_stmh->execute();
} catch (PDOException $e) {
echo 'DBにアクセスできません' . $e->getMessage();

 で出来たのですが、問題はここからです。このSQLで取得出来るのはyyyy-mm-ddという文字列です。
 なので、この文字列をfor文に入れられるように整数型の2011, 2016に戻さないといけません。
 超汚いですが、以下のようになりました。

<option value = "">全て</option>
<?php
$min_year = $get_min_year_stmh->fetch(PDO::FETCH_ASSOC);
$max_year = $get_max_year_stmh->fetch(PDO::FETCH_ASSOC);
$min_year = $min_year['MIN(date)'];
$max_year = $max_year ['MAX(date)'];
$min_year = substr(min_year, 0, 4);
$max_year = substr(max_year , 0, 4);
$min_year = intval($min_year);
$max_year = intval($max_year );
for ($i = $min_year ; $i <= $max_year ; i++){
?>
<option value = "<?=htmlspecialchars($i)?>"><?=htmlspecialchars($i)?>年</option>
<?php
}
?>

 これで、2011年から2016年を選べるプルダウンメニューを作れました。
 次は年数をSQL文に組み込むために文字列に直すのと、年を指定するだけでは指定する年のレコードは取得できないので、後ろに”-01-01”と”-12-31”を付けなければいけません。これは単純に

$sql = 'SELECT * FROM all_clothes_data WHERE 1=1';
$year = $_GET['year'];
$first_day = (string)$year . '-01-01';
$last_day = (string)$year . '12-31';
if($year) {
$sql .= ' AND date >= \'' . $first_day . '\' AND date <= \'' . $last_day . '\' ORDER BY date';
}

 といった感じですね。
 どうでもいいですが、テーブル名や変数名は実際使ってるのと微妙に違います。
 出来上がったものが見たければ、Sumire Uesaka Clothes Infoでも見てください。

category: 雑記

tb: 0   cm: 2

コメント

SQLのYEAR関数を使うとかんたんですよー
SELECT MAX(date) FROM clothes_table GROUP BY date かな?

havana #- | URL
2016/09/24 04:14 | edit

>>havanaさん

コメントありがとうございます。
そうですね。今phpmyadminで試したら
SELECT MAX(YEAR(date)) FROM `clothes_table`
で求めた結果が得られました。助かります。

園田うき #- | URL
2016/09/25 02:20 | edit

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://ukitouchtypist.blog.fc2.com/tb.php/917-e114b935
この記事にトラックバックする(FC2ブログユーザー)

訪問者数

プロフィール

最新記事

カテゴリ

月別アーカイブ

▲ Pagetop