カテゴリー
ICT・AI・robo

MySQL(さくら)のデータベースをブラウザで表示 ~今日の課題~

★今日の課題★
 さくらインターネットで契約中のレンタルサーバにあるMySQLデータベースを活用してブラウザからデータを見られるようにする。




データベース

 データベースとは、データが格納されている書庫や倉庫のようなものです。単にデータが存在するだけなので、そこからデータを引出さなければ格納されている情報の価値は潜在したままです。

 Excelの表も遠からずデータベースの一種です。
 取り扱えるデータは縦と横の二次元的なマトリクス、そのマトリクスはSheetで別々の物を作る事ができ、Book単位でまとめられます。

 同じMicrosoft製品ではAccessというソフトがデータベース管理ソフトになっています。
 紙媒体で昔からある伝票を積み重ねて帳簿とするようなデータ管理ができます。
 1枚1枚の伝票には取引先や商品などの情報が記録され、それが1カ月単位や客先単位でまとめられ帳簿となります。1枚の伝票が出荷台帳や売上台帳などさまざな帳簿とリレーションする事になりますが、これを昔は手書きで行っていたと思うと、ものすごい労力です。Accessを使えば、1枚の伝票に記録するだけで、さまざまな帳簿にもデータが反映されます。




データのリレーション

 データベース(database)では、データ(data)を関連付け(relation)してを活用していきます。

 relation(リレーション)とは関連や結びつきなどの意味があります。

 データベースでは商品や取引先などをコード化し、伝票上で結び付けるとともに、一意的なデータ管理をします。

 缶コーヒーを仕入れれば『缶コーヒー』だけではわからないので付加情報が必要になります。『ジョージア エメラルドマウンテンブレンド』と入力しても容量がわかりません。
 こうしたときに役立つのがバーコード(JANコード)です。伝票にはコードを入力しておくと商品を取り違えにくくなります。
 これが一意的な入力方法の1つです。

 商品データベースにJANコードと商品名を登録しておくと、伝票にJANコードが入力されたときに商品名を呼び出すことができます。

 この商品が入荷されたときには在庫台帳に記録しますが、JANコードと数量を記録しておけば、あとで『何の商品だっけ?』と思っても、商品データベースに照合することで商品名がわかります。
 これがリレーションの方法の1つです。

 商品が売れれば『在庫が減った』『売上金を受け取った』という記録が行われますが、レジでいちいち在庫台帳と売上台帳に記帳している時間は無いので、レジ専用の伝票を使います。
 実際のオペレーションではバーコードを走査して、お金を受け取って商品を渡すという行為になりますが、裏では何時何分に何円で何を何個売ったという伝票が起票されています。
 細かい事を言えば商品のJANコード以外にもレジの機械番号やレジ係の個人番号、金種なども記録されます。




情報の見せ方

 データベースは、どのようにしてデータを集めて管理するかという事が先行しますが、データは二次利用されなければ価値が生まれません。

 入出庫や売上については業務で活用されるので、その時点で一度は利用されますが、実際には『何時ごろに売れている』『まとめ買いが多い』などの解析にも用いられます。

 今回、いくつかのデータをウェブサイトで見やすくしたいと思ったのですが、どうやったら情報の羅列であるデータベースを見やすくできるのか、そもそもデータベースをウェブサイトで公開できるのか、といった壁に当たりました。




MySQL

 契約中の『さくらのレンタルサーバ』では『MySQL』というデータベースが追加料金なしに設置できます。

 このMySQLがどういうものかわかりませんでしたが『SQL』という名前を冠しているので、おそらくこちらから命令したとおりにリレーショナルデータベースを操作できるのであろうと思いました。

 サーバ上に置くことができるデータベースがMySQLしか無かったので、この一択で話を進めることになりました。




サーバコントロールパネル

 『さくらのレンタルサーバ』でデータベースを管理するためには『サーバコントロールパネル』にログインする必要があります。

さくらのレンタルサーバ:サーバコントロールパネル


 ログインすると下図のような画面になります。

 メニューにある『データベース』を選ぶと、データベース管理画面に遷移します。遷移先でデータベースを作成します。


 以後のデータベース管理は『phpMyAdmin』というウェブツールを使います。




テーブル作成

 データベースの構築の第一歩目は名前を付けるところからですが、実質的な作業は『テーブル』(table)を作る事から始まります。

 テーブルとは、Excelでいうsheetのような意味を持ちます。データのまとまりです。

 例えば『商品』『社員』『在庫』などを作ります。名称は日本語で『tbl_商品』でも良いのですが『tbl_staff』『tbl_zaiko』など半角英数にしておいた方が不具合が出づらいと思います。




カラムの追加

 カラム(column)はExcelでいうセルの列に類似します。

 テーブルは複数のカラムで構成されます。

 識別・重複防止用にユニークなカラムが1つ設定されるのが一般的です。

 社員テーブルであれば社員IDで識別し、氏名や職種、連絡先などのカラムが合わさって1つのテーブルを構成します。

 MySQLでは『phpMyAdmin』という管理ツールを使いますが、その中でカラムを追加する事が出来ます。
 『構造』タブの中に『個のカラムを追加する』という枠がありますので、任意の数を指定します。下図では17個を『class_code』の後へ追加する指示を出しています。




インポート

 作られたテーブル(データベース)にデータを入力するのは手打ちでも構いませんが、外からインポートすることもできます。

 今回はExcelで作ったマスタをCSVファイル(カンマ区切り)に変換して流し込みました。
 Excelの操作は『名前を付けて保存』からファイル種別をCSVにするだけです。
 デフォルトでは1行目も取り込まれるのでご注意ください。

 phpMyAdminではインポートタブからファイルを選択し、フォーマットを『CSV』にして『実行』を押します。




公開用ファイル

 今回はインターネットブラウザで見られるように、ホームページ上に公開することにしました。

 データビュー専用ページを設ける方法が早そうでしたので、そちらにチャレンジしました。

 『test.php』というファイルをパソコン上に作り『メモ帳』ソフトでタグを入力する方法でページファイルを制作します。
 それを『さくらのレンタルサーバ』の『サーバコントロールパネル』から『ファイルマネージャ』を使って原始的にウェブサーバへアップロードする方法としました。

 冒頭の記述はデータベースへの接続になります。
 『$server』にはphpMyAdminに接続する際に表示されているものを入力します。おそらく4桁の数字があると思います。
 『$userName』『$password』にはMySQLのユーザー名、パスワードが入ります。

 『$dbName』はデータベース名です。データベース作成時に任意で付けた名前です。

$server = "mysql●●●●.db.sakura.ne.jp";
$userName = "●●●●●●";
$password = "●●●●●●";
$dbName = "●●●●●●";

 後半では表示するデータ(カラム)と表示名を指定します。
 下記コードで表示名を順番に指定していきます。 黒丸の所は任意の文字列です。日本語でも大丈夫です。

<tr>
<th>●●●●</th>
</tr>

 下記コードではページのどのカラムを表示するか指定します。
 黒丸のところには、MySQLのカラム名を入力します。任意で『td』で囲まれた行を増やしていきます。

<?php
foreach($rows as $row){
?>
<tr>
<td><?php echo $row['●●●●"];,?></td>
</tr>
<?php
]
?>

 以後のデータベース管理は『phpMyAdmin』というウェブツールを使います。




公開

 『さくらのレンタルサーバ』の『サーバコントロールパネル』を開きます。その中にある『ファイルマネージャ』を開きます。

 ウェブサイト用に用意してあるフォルダ(www)に、先ほどの『test.php』をアップロードします。

 ブラウザを開いて、先ほどのファイルのアドレスを入力します。
 例えば『http://www.●●●.sakura.ne.jp/test.php』のようなアドレスです。黒丸には契約時に決めたIDが入ると思います。




参考資料

【参考】Qiita:MYSQLとPHPをつかって表を出力してみる(2018年4月18日投稿)

【参考】思考の葉:MySQLにつないでデータを追加する[INSERT][mysqli](2016年1月18日投稿)

【参考】思考の葉:MySQLにつないでテーブルデータを表示させる[SELECT][mysqli](2016年1月19日投稿)




 今回、4千行以上あるエクセルファイルをデータベースにインポートして、それをウェブで公開することができました。

 MySQLとPHPの組合せで、意外と簡単にできました。

 あとはリレーショナルデータベースの本領を発揮できるようなSQLを考えるだけです。

 最後までお読みいただき、ありがとうございました。

解決

コメントを残す

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