初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2023-01-20 21:36:21

yuppp
Guest

フォルダの入子のような関係

フォルダの入子のような関係を実現させたいと思っています。

レコードA, B, CとあるとしてAの中にB、Bの中にCがある、というような関係を持たせて、AのポータルでA, B, Cの値が表示されるようなリレーションを組みたいのですが全く考え方がわかりません。
どうかお知恵をいただければ、と思います。

#2 2023-01-20 23:07:10

Shin
Member

Re: フォルダの入子のような関係

住所をモデルにすればいいのでは
例えば、
大阪府 大阪市 北区 曽根崎
の四レコードで内包関係になります。

そのそれぞれに、
大阪府 大阪市 北区      曽根崎
          大阪府. 大阪市. 北区
                     大阪府. 大阪市
                                大阪府
というインデックスを持たせれば、大阪府から、4レコードを関連付けられます。このインデックスは、上からのインデックスデータに自己データを追加で作成できます。

Last edited by Shin (2023-01-28 08:24:25)

Offline

#3 2023-01-26 09:55:52

yuppp
Guest

Re: フォルダの入子のような関係

なるべくシンプルに説明しようと思って説明が足りなくなっていたかと思います、すいません。

住所のモデルだと今回にそぐわないのは、常に上下関係が決まっているわけではないのと、階層の数も決まっていない、またというところです。フォルダで考えていただければと思います。(上下関係も入れ替わりうるし、数の制限もなしです)

こちらも整理できてきましたが、上下関係は色々な形がありうるので定義するテーブルを別に作らなければならないのかと思います。
その中で各レコードの順序を定義し、それをキーに不等式のリレーションを組むという方法でいけるのではないかと思います。

#4 2023-01-26 14:08:34

Shin
Member

Re: フォルダの入子のような関係

Aの中にB、Bの中にC、Cの中にD さらに、上下関係はない、ということは、CからAを関連付ける必要があるのですよね。A⇋B,B⇋C,C⇋D というリレーションを組んで行けばいいのです。
ただ、Aから関連するレコードを探るには、そのリレーションをたどって、それぞれの階層情報にAの情報を付加すればいいのですが、階層が深くなり、最大レコード数だけの階層数がでる可能性があります。loop で処理していけばいいのですが、関連付けが変更されるたびにその処理が必要になるのでしょうね。
関連付けの追加は比較的処理は単純で、とりあえずは検証できています。
削除処理はかなり面倒で、例えば、上のB⇋Cが削除された場合には、A,BからD,AからC,D へのリンクも削除する必要がでてきます。
変更処理は、さらに面倒になります。A⇋B,B⇋E,E⇋F に変更されると、A,BからC,D のリンク(組み合わせで4リンク)を削除した上で、A,BからE,F を追加することになりますので、非常に面倒な処理になります。

Last edited by Shin (2023-01-26 14:48:31)

Offline

#5 2023-01-26 15:35:53

himadanee
Guest

Re: フォルダの入子のような関係

とりあえず、フォルダの場合上下関係の入れ替えというのは不可能では?(フォルダを別のフォルダに移動はできるが)
ファイル数の制限もFMのレコード数同様無限ではないです。

レコードの情報としては、親レコードへのリンクだけあれば可能でしょう。
それを元にリレーションを作ると、親であるレコードには「すべての子」のリストが作れます。
あとは再帰的に孫以降のリストも取得して1つのリストにする計算式を作れば、そこに自分を加えて最初の質問のポータルが作れます。

#6 2023-01-27 13:51:39

Shin
Member

Re: フォルダの入子のような関係

お友達の輪、というモデルなんでしょうか。A~Z のレコードがあって、A-B,B-C,X-Y,Y-Z でお友達関係が存在してる時、A からは A,B,C が、Zからは X,Y,Z がポータルに表示できればいいのですか。
追加していく、という手順だけでしたら、
https://www.dropbox.com/s/5fky3ai3xqdnc … 2.zip?dl=0
粗削りですがこんな動きになりそうですが、これが想定されている動きですか。

階層の深さの想定が難しく、最大レコード数を超えないのは確実なのでその回数だけloopを回していますが、レコード数が増えると大変です。
削除や変更はかなり難しいので、ポータルのキーのなかの関連する2個のキーを消去して、再構築した方が確実かもしれません。とくに、回帰している場合(ループになっている)には、ちょっと難しいですね。
マスターのレコード削除があると、1から設定した方がはやいかもしれません。

Last edited by Shin (2023-01-29 15:34:57)

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.007 seconds, 9 queries executed - Memory usage: 556.63 KiB (Peak: 579.59 KiB) ]