買うた本データベース

投稿日:

以前に書名羅列スクリプトAWS版つーのを作って、以後買った本を黙々と当サイトのサイドバーに貼ってた訳なんすが、

「登録した本は最新の10冊しか残らない」

という仕様が、段々不便になってきました。

この仕様では「はて? あの本持ってたっけ??」という時には既に消えててなんの役にも立たないし、いまや当サイトで唯一コンスタントに更新されてる手動データ(^^;を、古くなったからと無為に捨ててしまうのは如何にも勿体無いハナシ。

ちうことで、既に当サイトのバックエンドにはしっかりデータベースがある訳だし、ログに書名を羅列した際、ついでにMySQLにもデータを保存するようにしてみました。

//DB書込み処理

$sql = "insert into " . DB_TABLE . " values (NULL, '" . addslashes($title) . "', '" . addslashes($isbn) . "', '" . addslashes($author) . "', '" . addslashes(mb_convert_kana($publisher, "KVas")) . "', '" . $price . "', '". date("Y-m-d H:i:s") . "')";

mysql_query($sql,$db);

↑こんな感じ。

これで本のデータがDBに溜まってくようになりましたんで、今度は「溜まったデータを見る」スクリプトを書いてみます。

基本仕様は「データをだーっと並べて表示する」だけですが、折角MySQLを使う訳なんで、ついでに各種統計情報とか検索機能とかも実装してみました。こんなのが簡単に書けちゃう辺り、PHP+MySQLはホント便利(^_^)

ちょっと問題になったのは著者名。書名羅列スクリプトではAWSで得られる著者名が複数の場合、「/」で連結して1個の文字列にしてます。これが、そのままDBに格納するにはちょっと宜しくない。

ワタシも本来なら著者名のテーブルを別に作ってデータを正規化するべきだよなぁと思わなくは無かったんすが、その場合

「著者名をどうやってlike検索すれば良いの?」

という部分が問題になります。

一体データならそれこそ

where (title like '%" . $keyword . "%' or author like '%" . $keyword . "%' or publisher like '%" . $keyword ."%')

↑コレでOK(SQLバンザイ!:笑)(実際には複数語に対応するため、もう少し複雑な処理をしてます)なんすが、著者名を別テーブル化した場合、まず著者名テーブルをLIKEで検索して、その結果得られた著者IDを書名テーブルから引いてくる…という二段構えが必須となり、色々面倒になっちゃいます(もっと良い手があったら教えてください)

ちうことで、今回は著者名を正規化せず「そのまま方式」にしてみてます。そのため、著者名統計に於いて「工藤 かずや/浦沢 直樹」と「浦沢 直樹」が別々に勘定されちゃってますが、これは仕様(^_^;)

select *, count(*) as num from " . DB_TABLE ." group by author order by num desc,id desc limit 5

これも結構不便なのでそのうちに気が向いたら正規化するかもしれまへんが、取り敢えずは手抜きの方向で(^_^;)

これで目出度く買うた本リストが恒常的になった訳ですが、いざ書名を並べてみると・・・・・・結構格好悪いですねぇ(^_^;) ま、これこそ自業自得で、仕方ない事ではあるんですが(^^;;

ついでに、ダムの貯水率とかサイトのIP(情けないことに、当サイトのIPは結構動的に変動してます。固定IPにしたほうが良いのは解ってるんだけど、コストの関係とかありまして…(^^;;)もDBに格納するようにしてみました。こういったデータも、数が溜ってくればなにか使い道が出てくるかもしれません(^_^)