使用脚本在 filmemaker 中进行复杂搜索((A 或 B)和(C 或 D 或 E))
Complex search in filmemaker using scripts ( (A or B) and (C or D or E) )
我有一个 filemaker 数据库,我想根据以下条件显示记录:
显示所有者或用户为 "John" 且地点为 "London"、"Paris" 或 "Amsterdam"
的所有记录
第一部分很简单:
Enter Find Mode [Pause:Off]
Set Field [mydb::Owner; "John"]
New Record/Request
Set Field [mydb::User"; "John"]
Perform Find[]
但是第二部分呢?到目前为止,我还没有能够实现这一点。我当然可以继续循环遍历找到的记录并忽略我不想要的记录,但应该有更好的方法来做到这一点。
有。您可以在执行初始查找后使用约束搜索结果。
Enter Find Mode [Pause:Off]
Set Field [mydb::Owner; "John"]
New Record/Request
Set Field [mydb::User"; "John"]
Perform Find[]
#Constrain the found set
Enter Find Mode [Pause:Off]
Set Field [mydb::Place; "London"]
New Record/Request
Set Field [mydb::Place; "Paris"]
New Record/Request
Set Field [mydb::Place; "Amsterdam"]
Constrain Found Set []
创建 FileMaker 搜索的一种直接方法是在列表中重新表述您的 search-requirements,如下所示:
(O and L)
or
(O and P)
or
(O and A)
or
(U and L)
or
(U and P)
or
(U and A)
but not
(B and C)
换句话说:
- 对于您想查找的每个案例,您在一行中写下由'and' 分隔的条件。您可以添加括号,这是可选的,但它们确实可以更轻松地正确阅读和理解逻辑
- 然后用 'or'
分隔每一行
- 如果您有想要从结果中 排除 的情况,您可以写 'but not' 而不是 'or',并且 - 非常重要的 - 你添加列表末尾的排除项!
在你的例子中,你可以这样写:
(Owner="John" and Place="London")
or
(Owner="John" and Place="Paris")
or
(Owner="John" and Place="Amsterdam")
or
(User="John" and Place="London")
or
(User="John" and Place="Paris")
or
(User="John" and Place="Amsterdam")
当你写下这些后,你所要做的就是:
- 用等效的设置字段步骤替换每个条件(否则忽略 'and's)
- 用新的 Record/Request 步骤替换 'or'
- 将'but not'替换为新建Record/Request两步,省略记录
- 将所有这些置于进入查找模式[暂停:关闭]/执行查找[] 三明治,然后您就可以运行!
示例代码如下所示:
Enter Find Mode [Pause:Off]
Set Field [mydb::Owner ; "John"]
Set Field [mydb::Place ; "London"]
New Record/Request
Set Field [mydb::Owner ; "John"]
Set Field [mydb::Place ; "Paris"]
New Record/Request
Set Field [mydb::Owner ; "John"]
Set Field [mydb::Place ; "Amsterdam"]
New Record/Request
Set Field [mydb::User ; "John"]
Set Field [mydb::Place ; "London"]
New Record/Request
Set Field [mydb::User ; "John"]
Set Field [mydb::Place ; "Paris"]
New Record/Request
Set Field [mydb::User ; "John"]
Set Field [mydb::Place ; "Amsterdam"]
Perform Find[]
你用这个multiple-request方法还是AndreasT的constrain方法是性能问题,你得到的组合数量。
为了完整起见,这里有一个 'but not' 的示例 - 以英国脱欧为主题:
假设您想在欧洲大陆寻找 FileMaker 程序员,您可能有以下条件:
(Job="FileMaker" and Place="Europe")
but not
(Land="UK")
使用上面的方法,这将被实现为:
Enter Find Mode [Pause:Off]
Set Field [mydb::Job ; "FileMaker"]
Set Field [mydb::Place ; "Europe"]
New Record/Request
Omit Record
Set Field [mydb::Land ; "UK]
Perform Find[]
快乐的 FileMaking!
沃森先生
我有一个 filemaker 数据库,我想根据以下条件显示记录:
显示所有者或用户为 "John" 且地点为 "London"、"Paris" 或 "Amsterdam"
的所有记录第一部分很简单:
Enter Find Mode [Pause:Off]
Set Field [mydb::Owner; "John"]
New Record/Request
Set Field [mydb::User"; "John"]
Perform Find[]
但是第二部分呢?到目前为止,我还没有能够实现这一点。我当然可以继续循环遍历找到的记录并忽略我不想要的记录,但应该有更好的方法来做到这一点。
有。您可以在执行初始查找后使用约束搜索结果。
Enter Find Mode [Pause:Off]
Set Field [mydb::Owner; "John"]
New Record/Request
Set Field [mydb::User"; "John"]
Perform Find[]
#Constrain the found set
Enter Find Mode [Pause:Off]
Set Field [mydb::Place; "London"]
New Record/Request
Set Field [mydb::Place; "Paris"]
New Record/Request
Set Field [mydb::Place; "Amsterdam"]
Constrain Found Set []
创建 FileMaker 搜索的一种直接方法是在列表中重新表述您的 search-requirements,如下所示:
(O and L)
or
(O and P)
or
(O and A)
or
(U and L)
or
(U and P)
or
(U and A)
but not
(B and C)
换句话说:
- 对于您想查找的每个案例,您在一行中写下由'and' 分隔的条件。您可以添加括号,这是可选的,但它们确实可以更轻松地正确阅读和理解逻辑
- 然后用 'or' 分隔每一行
- 如果您有想要从结果中 排除 的情况,您可以写 'but not' 而不是 'or',并且 - 非常重要的 - 你添加列表末尾的排除项!
在你的例子中,你可以这样写:
(Owner="John" and Place="London")
or
(Owner="John" and Place="Paris")
or
(Owner="John" and Place="Amsterdam")
or
(User="John" and Place="London")
or
(User="John" and Place="Paris")
or
(User="John" and Place="Amsterdam")
当你写下这些后,你所要做的就是:
- 用等效的设置字段步骤替换每个条件(否则忽略 'and's)
- 用新的 Record/Request 步骤替换 'or'
- 将'but not'替换为新建Record/Request两步,省略记录
- 将所有这些置于进入查找模式[暂停:关闭]/执行查找[] 三明治,然后您就可以运行!
示例代码如下所示:
Enter Find Mode [Pause:Off]
Set Field [mydb::Owner ; "John"]
Set Field [mydb::Place ; "London"]
New Record/Request
Set Field [mydb::Owner ; "John"]
Set Field [mydb::Place ; "Paris"]
New Record/Request
Set Field [mydb::Owner ; "John"]
Set Field [mydb::Place ; "Amsterdam"]
New Record/Request
Set Field [mydb::User ; "John"]
Set Field [mydb::Place ; "London"]
New Record/Request
Set Field [mydb::User ; "John"]
Set Field [mydb::Place ; "Paris"]
New Record/Request
Set Field [mydb::User ; "John"]
Set Field [mydb::Place ; "Amsterdam"]
Perform Find[]
你用这个multiple-request方法还是AndreasT的constrain方法是性能问题,你得到的组合数量。
为了完整起见,这里有一个 'but not' 的示例 - 以英国脱欧为主题:
假设您想在欧洲大陆寻找 FileMaker 程序员,您可能有以下条件:
(Job="FileMaker" and Place="Europe")
but not
(Land="UK")
使用上面的方法,这将被实现为:
Enter Find Mode [Pause:Off]
Set Field [mydb::Job ; "FileMaker"]
Set Field [mydb::Place ; "Europe"]
New Record/Request
Omit Record
Set Field [mydb::Land ; "UK]
Perform Find[]
快乐的 FileMaking!
沃森先生