みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
#4の「の条件を削除したら3秒くらいで処理が終わります。」で検索
>関連レコードへ移動でテーブル2へ移動//取得元2・現在のウィンドウ・レイアウト2・関連レコードのみ・対象レコード
>関連レコードへ移動でテーブル1へ戻ってくる//上記の取得元とレイアウトが1
検索条件を変更//最初の検索条件が呼び出される
検索実行[]//呼び出した条件を使うので条件指定なし
サンプルに使ったファイルを公開しておきます。
レコードを含ませるとファイルが大きくなるので、空ファイルです。最初にファイルを開くと、レコードを大量に作るようになっていますので、スクリプトを中止しないでください。数分はかかります。
https://dl.dropboxusercontent.com/u/926 … 22.fp7.zip
動かしているスクリプトは、中をみてください。
Offline
検証に使ったファイルを公開しておきます。
https://dl.dropboxusercontent.com/u/926 … 22.fp7.zip
レコードを含めるとファイルが大きくなりますので、最初に開いた時に自動的に作成する様にしてありますので、スクリプトを止めないで下さい。数分以上かかると思います。
上のスクリプトの組み方も、中を見て参考になさって下さい。
Offline
Timさま Shinさま
ありがとうございます。
Shinさまはファイルまで作って下さってありがとうございます。
作って下さったファイルを元に私のスクリプトに当て込んでみると10分以上クエリー中で計算結果が出ません!
でもShinさまのスクリプトはめっちゃ速いです。
ファイルを見比べてみると、私のファイルのテーブル①は70個ほどフィールドがありました。テーブル②は2個だけですが。
リレーションは
テーブル①::電話番号 = テーブル②::電話番号
なので、フィールド数は関係ありませんよね?
https://box.yahoo.co.jp/guest/viewer?si … ype=detail
↑↑はShinさまが作って下さったファイルを元に私が使っている環境を簡単に再現したものです。
レイアウト「test1210」のヘッダの「除外」のボタンを押すとスクリプト実行され除外が始まるようにしてます。
除外の内容も少し変えてありますが、全く問題ないです。
が、
たとえば先に「東京」で検索したあとに除外のボタンを押しても、全レコードが対象になってしまうのですね。
これは、皆様が前々から指摘されていたんですが、今頃やっと気付きました。
なぜ
1.私のファイルでスクリプトを組むと異常にクエリ処理が出来ないのかと
2.全レコードが対象にならずにスクリプトを機能させることは出来ないのか
この2点よろしくお願い致します。
Offline
スクリプトに、一部変更が入っています。(スクリプトの動きからしておかしいことに気づいてくださいね。)そのために正常終了しても、違った結果になっています。
また、サンプルでは、東京 の重複レコードが無いので、関連レコードへ移動がエラーになります。その際のエラー処理は含んでいませんので、ご自分で考えてみてください。
Offline
Shinさま
ご指摘ありがとうございます。
スクリプト出来ました!
が、
クエリに時間がかかります。
ファイルを開いて1回目の除外だと約35分かかりました。
2回目からは一瞬です(5秒ももかかりません!)
1回目はなぜこんなに時間がかかるんでしょうか?
ここを速くは出来ないんですかね??
Offline
索引ができていないのでは。
また、サーバー運用でしたら、サーバーからクライアントへインデックスを送っているようですので、その時間もかかるでしょう。
Offline
#4の「の条件を削除したら3秒くらいで処理が終わります。」で検索
の検索条件は毎回変わるわけですが、おおよその検索結果はどのぐらいあるんでしょう。
この関連レコードを取得する時間が長いんだと思います。
ここを極力少なくしないと、たぶん高速化の効果が出ません。
関連レコードはキャッシュされるので、2回目以後は実質検索不要な状態になるので早いです。
Shinさま Timさま
ありがとうございます。
索引はできています。
サーバー運用だと時間もかかるのですね。
>#4の「の条件を削除したら3秒くらいで処理が終わります。」で検索
の検索条件は毎回変わるわけですが、おおよその検索結果はどのぐらいあるんでしょう。
→ 55000件ほどあります。
ここの件数は少なくは出来ないですね。
すこしやり方を変えたら検索が速くなると思うのですが、
#20 で旅人さまが
>非保存の計算式結果を別フィールドに全置換しておくくらい?
というのが簡単そうです。
#1 >今現在は、
テーブル②に別の計算フィールド(NGフラグ)を作って
Case ( 電話番号 = テーブル①::電話番号 ; "NG" ) と計算式を入れて
とあるのですが、計算フィールドを別フィールドにテキストとして置換もしくは計算結果をテキストとしてコピーできればあとは出来そうです!
予め計算フィールドに値がある場合でも置換する方法はございますでしょうか?
何度も質問して申し訳ございませんがよろしくお願い致します。
Offline
索引は、「すべて」になっていますか。
または、検索用専用の数字のフィールドを作っておくと、劇的に早くなることもあります。(単純な電話番号でしたら有効かも)
ひとつ思いついたのですが、テーブル2の電話番号は、テーブル1に必ずあるのでしょうか。
Last edited by Shin (2013-12-14 10:03:12)
Offline
>索引は、「すべて」になっていますか。
→ 索引は「最小限」で必要時に索引を自動設定にチェック入っています。
>検索用専用の数字のフィールドを作っておくと、劇的に早くなることもあります。
→ 早くなる方法教えてください!
>テーブル2の電話番号は、テーブル1に必ずあるのでしょうか。
→ 必ずはありません。
私のファイルではおおよそ40万件中2500件ほどしか重複していません。
Offline
索引は、すべて に変更してみて下さい。
数字フィールドを作るのは簡単で、計算フィールドで、電話テキストフィールドを参照するだけです。ー などの記号が入っているのでしたら、filterをかけて数値だけにしておくといいでしょう。
たった2500件ほどの重複でしたら、それぞれのテーブルにレコードを作った時に、重複するレコードにフラグを立てておくのが一番簡単では。
最初から気になっているのですが、テーブル1とテーブル2の関係は。例えば、テーブル1が顧客管理用テーブルで、テーブル2が販売経歴テーブルとかですか。
Offline
応答が長すぎますので、
簡単に書きますので理解の助けにしてください。
AテーブルにあるレコードのID 1 2 3 4 5
BテーブルにあるレコードのID 3 4 5 6 7 8
AからBの関連レコードに移動(Aはすべてを表示で、全てを対象に)
すると
Bで 3 4 5 が表示されます。
この状態(3レコードが対象)で 次にBからAに
関連レコードに移動とすれば、
Aで 3 4 5 が表示されます。
対象、対象外を入れ替えるのであればそのステップを付け加えるだけ。
こんな簡単なことでは?
ありがとうございます。
>それぞれのテーブルにレコードを作った時に、重複するレコードにフラグを立てておくのが一番簡単では。
→ そのフラグの立て方がわからないんです。
テーブル1が当社管理している全てのリスト、テーブル2が非勧奨リストです。
あと♯34での質問
>テーブル②に別の計算フィールド(NGフラグ)を作って
Case ( 電話番号 = テーブル①::電話番号 ; "NG" ) と計算式を入れて
とあるのですが、計算フィールドを別フィールドにテキストとして置換もしくは計算結果をテキストとしてコピーする
これももし可能でであれば教えて頂けませんでしょうか??
Offline
テーブル1に適当なフィールドを作り、上の式で全置換すればいいです。
または、一回だけ全レコードに対して除外のスクリプトを動かして、その結果レコードに対して全置換しておいてもいでしょう。
その後は、それぞれのテーブルにレコードが追加された時にチェックすればいいでしょう。
Offline
ありがとうございます。
上の式で全置換というのはどれのことですか?
しょうもない質問で申し訳ございません。
Offline
#39で貴方が書かれている式と同じ様な式です。
Offline
Shinさま
ありがとうございます。
ようやく出来ました。
ご丁寧に対応して頂きましてありがとうございました!
Offline
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 623.01 KiB (Peak: 639.91 KiB) ]