我正在编写一个包含多个过滤器的搜索页面,我想知道这是否是获得结果的最佳方法。
搜索的每个结果都有几个属性,这里我使用两个属性来简化示例。
主要'项目'表:
EnumObject
'语言'表:
enumObject
'attributes_one'表:
getApplications(): Promise<Applications[]> {
return this.http.get(this.api + "/applications")
.map(response => response.json() as Applications[])
.toPromise();
}
'attributes_one_translations'表:
id_items
1
2
'attributes_one_match'表:
id_languages | language_code
1 es
2 en
'attributes_two'表:
id_attributes_one
1
2
'attributes_two_translations'表:
id_attributes_one_translations | id_attributes_one | id_language_code | translation
1 | 1 | 1 | Oro
2 | 1 | 2 | Gold
3 | 2 | 1 | Plata
4 | 2 | 2 | Silver
'attributes_two_match'表:
id_attributes_one_match | id_attributes_one | id_items
1 | 1 | 1
2 | 2 | 1
3 | 1 | 2
概念是每个属性表可以有一个或多个匹配项,并且该匹配可以有0个或更多个翻译。
当用户选择过滤器以获取具有此属性方兴未知的attribute_one“Gold”或“Silver”顺序的所有项目时,我正在使用的查询:
id_attributes_two
1
我得到的结果是:
id_attributes_two_translations | id_attributes_two | id_language_code | translation
1 | 1 | 2 | 99% gold
这个结果正是我所期待的。现在:
id_attributes_two_match | id_attributes_two | id_items
1 | 1 | 1
我担心性能,因为每次用户更改其中一个过滤器(它更新过滤器和结果)时,我正在执行的搜索过滤器页面会通过ajax自行更新。每页的最大结果将是1000个项目,我没有将LIMIT放在示例的查询中。
我不是一个SQL专家,所以我真的不知道我在做什么是最好的方法。我希望得到一些反馈。
非常感谢!