いきなりですが Beta16 のソースを晒します.
抽出機能の一部です.
db.getSqlIntListF( qidx,
L"SELECT qid FROM question"
L" WHERE qid IN (SELECT qid FROM section WHERE sid=%d)"
L" AND answer IN (SELECT answer FROM question WHERE qid IN (SELECT qid FROM section WHERE sid=%d))",
m_sid_from,
m_sid_ref );... snip ...
// 問題集名の正規化
pdb3::String strOutSection = db.makeUniqueNameAt( pdb3::ROOT_FOLDER, mc_strOutSection );// create section.
pdb3::Folder f = db.getFolder( pdb3::ROOT_FOLDER );
try{
pdb3::Binder b = f.addBinder( strOutSection.c_str() );b.beginTransaction();
for( UINT i=0; iSQL 文が含まれていますが,ほんのこれだけのコードで抽出結果の問題集を作っています.
もちろん,裏には pdb3 という巨大なライブラリがあるわけですが,上記のソースを見ると,結構オブジェクト指向的に使えていて便利なライブラリになっています.P-Study System をオープンソースにする予定はありませんが,近日公開予定の PSS 関連の新しいツールはオープンソースにする予定で,この pdb3 も含めて公開するつもりです.
ちなみに今回の SQL 文ですが,もっと素直な書き方もあります.
いわゆる副問い合わせ(サブクエリー)ではなく,内部結合による方法ですね.ただ,SQLite の速度的な問題があるので今回はサブクエリーで書きました.