見出し画像

何時も使う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関数を使っているくらいですね。

実際の画面はこんな感じになります。

画像1

対象レコード番号を入れると、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を入力すると、結果はこのように表示されました。

画像2

一見成功しているように見えましたが、実は最終レコードから始まって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個分のデータを取り出すようになりました。

結果がこれです。

画像3

無事、求めていたように表示できました。

今回も、PHPの文法的な所でかなりつまづきました。特に、SQL文にしている部分は、引数を入れるとブランクが1つないだけでも動かず、非常に苦労しました。

しかし、自分で問題を解決することが、一つひとつ身になっていくことを体験することができ、良かったですね。

まだまだ、改善は続きます。

いいなと思ったら応援しよう!

じぇいかわさき@ものづくりアドバイザー兼エッセイニスト
じぇいかわさきです。生産技術者として35年、今まで培った経験とスキルを元に、ものづくりに関わる世の出来事に対して思ったことをホンネで書いてます。ノウハウやアイデアもありますよ。 また写真も全力で撮っています、気に入った写真があればサポートや感想をぜひお寄せください。