Ajax

Ajaxを用いて NAUSICA AMI試験の監査ツールを実装しました。Ajaxの仕組みなんてすっかり忘れていたのですが、プログラム書いている内にすぐに回復しました。やはりAjaxを用いると従来の Webページからは信じられないような画面の書き換えが行われ、プログラムを書いた甲斐があります。

その骨子は三つのパートです

  1. 主要画面
    1. ここではデータベースから受け取ったデータを cssを用いて見てくれを整えて出力する
    2. さらに、データを受信するためのボタンをつける
  2. データを受け取る Javascript (Ajax)
    1. ここがAjaxの根幹です
    2. ブラウザの Document Object Model (DOM)を用いてダイナミックに画面を書き換えます
  3. 裏で動くデータ加工プログラム
    1. データベース MySQLに対して SQLを発行してデータを得ます
    2. それを一定の形に加工します
    3. 加工の仕方としては、 JSONや HTMLを用いるのが一般的ですが、 TEXTでも良いのです 今回は HTMLを用いました

    忘れないようにおいおいプログラムを書き記します

知らなかった

何とこんなことも知りませんでした 今 NAUSICA AMI試験監査用インターフェースを作成しているのですが、そこで発行する SQLで例えば 病院毎にかつ、登録日順に並び変えるという、ごく普通の操作をすることに対して これは ORDER BY句に複数指定すれば良いだろう、ということは容易に想像つきます そこで自然に

SELECT * FROM `pt_tbl` ORDER BY `hp_id` AND `registration_date`;

としたのですが、これはとんでもない結果を返します きっと、二つの項目を合成して並び替えするのです
正解は

SELECT * FROM `pt_tbl` ORDER BY `hp_id`, `registration_date`;

なのです。こんなとも知らなかったとは驚くべしでした

月別登録症例数

月別登録症例数をSQLで書きました

SELECT DATE_FORMAT(`registration_date`, '%Y/%m')
AS `MONTH`, COUNT(1) AS `月別登録数`
FROM `pt_tbl`
GROUP BY `MONTH`
ORDER BY `MONTH` DESC

当たり前と言えば当たり前ですが、GROUP BYという集合演算は何と便利なのでしょうか!!

SQLでグループ毎の要素数で並び変える

NAUSICA AMI臨床試験において、登録症例数で病院名を出力する時に、それぞれの登録数も出力し、さらには登録数で並び変える必要がありました。これに対して、

SELECT DISTINCT `hp_name` FROM `hp_tbl` 
INNER JOIN `pt_tbl`
ON `hp_tbl`.`hp_id` = `pt_tbl`.`hp_id`

このようにすれば登録病院名のみ出力されます。しかし、登録数や登録数での並び変えは困難です正解は

SELECT`hp_name`, COUNT(*) AS 登録数 FROM `hp_tbl` 
INNER JOIN `pt_tbl` ON `hp_tbl`.`hp_id` = `pt_tbl`.`hp_id`
GROUP BY `hp_name`
ORDER BY 登録数 DESC

このようにするのです。