
何時も使う24回分のデータ抽出に挑戦
どうも、じぇいかわさきです。
今日もまた少しだけ、Web画面の表示と動作改善をしました。
今回は、データベースの総データ数を表示すると同時に、何時も使用している過去24回分のデータ抽出できるように挑戦しました。
総データの表示はあまり使わず、どちらかと言うと過去24回分のデータ活用が多いからですね。
対象レコード番号を入力し、その番号から24個分の過去データを抜き出すためには、ファイルを2つに分ける必要があります。
ここまでは良かったのですが、結果で少々問題発生。
それでは、今回挑戦した内容を記録しておきましょう。
データを入力するための画面を作成するぞ!
まずは対象レコードを入力して、その値を引数として別のファイルに送るための、最初の画面を作成します。
今回は、今後の結果入力画面に適用できるように、まずはシンプルに作ってみます。
これはhtmlで<form>タグを使用することで、入力したデータを入れる枠を作成します。
そして、入力された値をPOSTを使用して別ファイルに引数として入力された値を渡します。
コードとしては、以下のようになりますね。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<link rel="stylesheet" href="style.css">
<title>MariaDBへの接続テスト</title>
</head>
<body>
<h1>ロト6当選番号データベース</h1>
<p></p>
<h2>PHPによるMariaDB接続とSELECTテスト</h2>
<?php
$dsn = 'mysql:dbname=test;host=localhost';
$user = 'pi';
$password = 'pi123456789';
$dbh = new PDO($dsn, $user, $password);
$sql = 'select count(*) from result';
foreach ($dbh->query($sql) as $row) {
print"登録データ数:".($row[0]);
}
$dbh = null;
?>
<p></p>
<form action="send.php" method="post">
対象レコード番号:<input type="textarea" name="data_nbr" value="">
<input type="submit" value="送信">
</form>
<p>対象レコード番号から24個分前のデータを抽出します。</p>
</body>
</html>
非常にシンプルなコードで、レコード数を調べるためにCOUNT関数を使っているくらいですね。
実際の画面はこんな感じになります。
対象レコード番号を入れると、data_nbrに値が登録され、引数としてsend.phpに渡されると同時に、今度はsend.phpが画面表示をすることになります。
send.phpは従来のtest2.phpの改良版で、SQL文の部分が若干以下のように修正になっているだけです。
$sql = 'select * from result where kaisai >'.$_POST["data_nbr"].'-24';
$_POST["data_nbr"]の部分が、test.phpから引き渡された値になります。
それ以外は全くの変更無しですね。
例えば、レコード番号に1500を入力すると、結果はこのように表示されました。
一見成功しているように見えましたが、実は最終レコードから始まって1500から更に24個前まで繋がっています。
つまり、1563−1500−1477という事で、86個分のデータが出てしまいました。
実際に使用するのは、最終レコードから24個なので実際の使用には問題ないですが、思った通りに動いていませんので、Bugですね。
まずは、こういうBugから直していかないといけませんね。
プログラムは正直だから、間違っているのは自分。
色々と調べた結果、Betweenを使用すれば解決できるのまで分かりました。
最終的にSQL分を次のように修正しました。
$max = $_POST['data_nbr'];
$min = $_POST['data_nbr']-24;
$sql = 'select * from result where kaisai between '.$min.' and '.$max;
これで完璧になり、どんな数字を入れても、そこから24個分のデータを取り出すようになりました。
結果がこれです。
無事、求めていたように表示できました。
今回も、PHPの文法的な所でかなりつまづきました。特に、SQL文にしている部分は、引数を入れるとブランクが1つないだけでも動かず、非常に苦労しました。
しかし、自分で問題を解決することが、一つひとつ身になっていくことを体験することができ、良かったですね。
まだまだ、改善は続きます。
いいなと思ったら応援しよう!
