搜索逻辑可高效访问6个以上的相关表

时间:2012-02-27 09:14:17

标签: php mysql doctrine

在我目前的项目中,任务是能够搜索6个表。

表格是: A,B,C,D,E,F

所有表格都通过列表中的另一个表格相互关联。

E.g。 A-> B B-> A-> C C-> F F-> D

喜欢用户 - > Phonenumber Phonenumber-> Country etc。

由于用户出现的搜索掩码/表单留下了开放的可能性,只发送某些参数到服务器,搜索必须找到结果R,无论用户通过哪个参数。

在这种情况下,参数是上面列出的任何表格的列值,例如Phonenumber-> Provider = Verizon表示用户希望所有条目与provider = Verizon。

实际问题不是在特定表中搜索,而是在特定表中搜索从特定表中找到的结果中检索正确结果。

让我解释一下:在我们的例子中,结果不是我们当前搜索的表的表对象。

结果应始终是同一个对象结果,该结果必须在A和B中至少有一个条目。 示例要求: A =用户存在 B =他有一个Phonenumber

由于所有表都直接或间接地彼此关系,我们只能通过查看相关表来检索具有Provider = Verizon和JOIN的行,而无需在A或B中搜索列来访问结果相关表格通过ids / keys / constraints。

目前我做了多个查询。 我首先检查参数的类型。 “他们是从A到C的列吗” 是的,然后在A,B或C上进行直接选择,并将结果作为结果。

“他们是E的列吗” 是的,然后在E上执行SELECT,然后在C上执行另一个SELECT,其中包含来自E的

的c_id

作为结果(在PHP中)我总是希望有一个包含A.value1,B.value1的对象/数组 我从不想要任何有关C,D,E或F的信息。 我只想通过在一个或多个表的列中表示的任何允许/可搜索参数来获得由A.value1和B.value1组成的Result,例如, Provider = Verizon AND Country = China AND OnVaccation = True

我很抱歉这种复杂性。

1 个答案:

答案 0 :(得分:1)

我认为,为此您可以在http://sphinxsearch.com/使用Sphinx Search Engine。您应该设置SQL查询,该查询将用于构建搜索索引。在PHP之后,你可以使用简单的API来执行搜索。