六帖のかたすみ

DVを受けていた男性。家を脱出して二周目の人生を生きています。自閉症スペクトラム(受動型)です。http://rokujo.org/ に引っ越しました。

LanguageTrainer ある程度完成

六帖Webアプリ更新
2014-08-03の続き。一日かけてほぼ形になった。本日作業したのは
・出題画面作成、問題選択論理・ログ機能実装
・若干の仕様変更、デバッグ(一番時間がかかった)
で、ひとまず動作するようになった。問題は英語のみ22問登録した。明日から随時問題を登録してまともに使用してみよう。
まだ作業できてないのは
・問題集の編集機能の充実。現在新規追加しかできない。登録済み問題の閲覧、編集、削除機能を付ける。ただし削除はログとの兼ね合いで面倒なので後回し。
・統計機能。覚えた問題の数、解いていない問題の数、最後にアプリを使用した日など。
・問題集にパスワードをかけるべき。
・語学以外の形式に対応する。lttable.TableTyleによって動作を変える。
・ドキュメントの作成。まともに開発・保守するプログラム第一号になりそうだ。
・(バグ)空の問題集を選択するとエラーになる
これらはまた来週。
Eclipseの効果はすさまじく作業効率が2倍くらいになった。PHPでまともにプログラム組んだのはほぼ初めてだったのに、いつもの仕事のように作業できた。好きで組むプログラムの何と楽しいことよ。仕事だとすぐ眠くなってしまうのに自分で作るとちっとも眠くならない。
今回学んだ、SQLで一方のテーブルに存在するが他方のテーブルに存在しないレコードの抽出方法。一度も解いていない問題の一覧を選択するときに使用した。テーブルBに存在しないレコード一覧をテーブルAからゲットするなら、WHERE句に
NOT EXISTS(SELECT 1 FROM B WHERE リレーション条件)
を入れてやればいい。今回、ltelement(問題集)の中から一度も解いてない、つまりltlogテーブルにレコードがない者の一覧を作成したかったので、

SELECT ltelement.ElementID FROM ltelement WHERE ltelement.TableID=?? 
AND NOT EXISTS(SELECT 1 from ltlog WHERE ltlog.UserID=?? 
AND ltelement.TableID=ltlog.TableID AND ltelement.ElementID=ltlog.ElementID)

とした。