みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
算数の問題を分類し,テーマやキーワードに沿った問題を検索できるデータベースを作ろうと思っています。
キーワードで検索 → そのキーワードを含んだ問題がヒット というようなシステムを作りたいと思っています。
一つの問題が,複数のキーワードを含みます。これは,繰り返しフィールドに入力します。
ただ,検索語が非常に曖昧になりがちで,たとえば「つるかめ算」であれば,
そのキーワードとしては,「2つのつるかめ」「弁償つるかめ」というキーワードを含みますが,
「2つのつるかめ」は「2量のつるかめ」という人もいれば,
「罰金つるかめ」を「弁償つるかめ」という人もおり,人によって使う言葉が微妙に違います。
そこで,画面にすでに登録済みのキーワードを一覧で表示して,それをクリックしていって,チェックがついたキーワードを一気に検索フィールドに流し込んで,キーワードを含んだ問題が検索されるというシステムにしたいと思います。
質問させていただきいのは,すでに登録済みのキーワードを画面に一覧で表示するようなことは可能かどうかです。
[問題 データベース]
・問題フィールド・・・画像やテキスト
・キーワードフィールド(繰り返し)
・ジャンルフィールド
・表示フィールド(グローバル)・・・検索フィールドに表示したいキーワードを決めるためのグローバルフィールド
[キーワード データベース]
・キーワードフィールド
・ジャンルフィールド
キーワードはジャンルをつけて,値一覧を絞り込むためにジャンル分けします。
検索用画面には,問題フィールドのグローバルフィールドを表示し,
どのジャンルのキーワードを検索したいかを選びます。
グローバルフィールドをきめると,それに応じて,キーワードデータベースの該当するジャンルのキーワードを一覧表示し,
チェックボックスが表示されます。ユーザーはそれをクリックして,検索ワードを決定すると,スクリプトでそれを問題データベースの検索ワードに設定し検索を実行
というような流れをイメージしています。
現在詰まっているのは,キーワードデータベースのキーワードいちらんをどうやって抽出し,それをどうやって表示させればよいかという部分です。
どなたか,お知恵を拝借いただけませんでしょうか・・・
環境 FMPadv18 mac
Last edited by youkazu7777 (2020-01-11 00:53:11)
Offline
>#1『現在詰まっているのは,キーワードデータベースのキーワードいちらんをどうやって抽出し,それをどうやって表示させればよいかという部分です。』
ただ、指定ジャンルの関連キーワードによる「動的値一覧」を作るだけです。
Offline
Hiroさん
ありがとうございます。
たしかにそうでした。
しばらくファイルメーカーから離れていたせいで忘れておりました。だめですね。
もうすこし作ってみます。
また,よろしくお願いいたします。
Offline
Hiroさん
有難うございました。
動的値一覧をチェックボックスタイプの値一覧で、絞り込んで表示させることできました。
引き続いての質問恐縮ですが、お知恵お借りできればと思います。
[問題 データベース]
・表示させるジャンル(グローバル)・・・検索フィールドに表示したいキーワードを決めるためのグローバルフィールド
・表示させる単元(グローバル)・・・ジャンルを決めた後に、さらに特定の単元に絞り込みたい際に指定
[キーワード データベース]
・キーワードフィールド
・単元フィールド
・ジャンルフィールド
ジャンル絞り込み用のグローバルフィールドを設定したら、そのジャンルに対応したキーワードは表示できました。
ただ、これも数百の項目に跨がるようなケースがあると想定され、それをさらに細分化して表示したいと思います。
しかしつねに細分化表示がしたいということではなく、項目が多数に渡るときだけ細分化表示ができればということになります。
「表示させるジャンル」フィールドのみが入力されているときは、該当ジャンルの関連レコードを全部表示
「表示させる単元」が追加で入力されたときは、その該当ジャンルからさらに絞り込んで関連レコードを表示
というような動作はかのうでしょうか?
一つのリレーションでは、このような動的なリレーションを張ることはできないですよね・・・?
なにか方法はありますでしょうか。
よろしくお願いいたします。
Offline
動的値一覧のリレーションの照合キーを、レコードIDのキーに換えると良いでしょう。
というのは、その追加条件は、関連レコードIDならSQL関数で取得可能だからです。
キーワードテーブルに「レコードID」計算フィールド(式:Get(レコード ID))を用意して、
ExecuteSQLの関数式は、
ExecuteSQL(
"
SELECT ""レコードID""
FROM ""キーワードテーブル""
WHERE ""ジャンル""=?
" & Choose(IsEmpty(g単元フィールド); " AND ""単元フィールド""='" &g単元フィールド& "' ")
; ""
; ¶
; gキーワードフィールド
)
Last edited by Hiro (2020-01-13 05:19:05)
Offline
Hiroさん
たびたび有難うございます。
申し訳ありません,
" & Choose(IsEmpty(g単元フィールド); " AND ""単元フィールド""='" &g単元フィールド& "' ")
の部分が理解できずに,先に進めていません。
ExcuteSQL難しいです・・・
わかってないこと↓
・最初の 「&」 の意味
・その次の文中の「AND」はなぜ,突然「AND」から始まる?
・そもそもなぜレコードIDを用意する必要があるのか?
すみません,何にもわかってないです(^_^;)
あと,最後のgキーワードフィールドは第四引数というやつですか?
これは,クエリー文の?のところに代入されるという認識でよいでしょうか。
Offline
"
SQL構文
" & Choose(IsEmpty(g単元フィールド); " AND ""単元フィールド""='" &g単元フィールド& "' ")
の部分が理解できずに,先に進めていません。
これは、SQL構文を生成するテキスト計算式です。
先ずは、どこかでこの式を試験実行して生成された結果SQL構文を見て下さい。
その結果から式が何を遣ろうとしているかを読み取ってください。
式の立て付けは、
" 単キー検索のSELECT・・WHERE句文 " & " 追加第二キーのAND検索キー設定WHERE句文 "
(" SELECT・・・WHERE key1='value1' " & " AND key2='value2' ")
わかってないこと↓
上記説明から推察できると思いますが、
最初の 「&」 の意味
「SQL主文」と「AND検索キー設定文」との2テキスト連結記号です。
その次の文中の「AND」はなぜ,突然「AND」から始まる?
第二キーのAND検索指定のためのSQL演算記号です。
そもそもなぜレコードIDを用意する必要があるのか?
リレーションは有無のハッキリしない照合キー(第二キー)では設定できません。
そこで確実に存在する「レコードID」で代替えするのです。
さらに不確定な検索条件には計算式で任意条件設定ができるSQL関数を使うわけです。
SQLで抽出した関連レコードID一覧をマルチキーに本命の動的値一覧用のリレーションを組みます。
あと,最後のgキーワードフィールドは第四引数というやつですか?これは,クエリー文の?のところに代入されるという認識?
はい、そうです。一方「g単元フィールド」の第五引数の事前設定は有無が不確かなため、「?」引数でなくSQL文に直書きしています。
Offline
Hiroさん
有難うございます。
なるほど。だいたい分かったと思います。
もう一点だけ確認させて下さい。
SQLで抽出した関連レコードID一覧をマルチキーに本命の動的値一覧用のリレーションを組みます。
このマルチキーでリレーションとは具体的にはどのようなやり方になりますでしょうか。
何とリレーションを持たせているのかがわかりません。デカルト積のリレーションですか?
Offline
Hiroさん
有難うございます。
やっぱりわかりました。
SQLでIDの一覧を取得したら,それがそのままリレーションフィールドになるんですね。
マルチってそういうことか。
Offline
Pages: 1
[ Generated in 0.017 seconds, 9 queries executed - Memory usage: 548.91 KiB (Peak: 569.45 KiB) ]