Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 搜索逻辑以访问6个以上的相关表_Php_Mysql_Doctrine - Fatal编程技术网

Php 搜索逻辑以访问6个以上的相关表

Php 搜索逻辑以访问6个以上的相关表,php,mysql,doctrine,Php,Mysql,Doctrine,在我当前的项目中,任务是能够搜索6个表 表格如下: A、 B、C、D、E、F 所有表都通过列表中的另一个表相互关联 例如:A->B->A->C->F->D 比如用户->电话号码->国家等 由于用户获得的搜索掩码/表单允许只向服务器发送某些参数,因此无论用户通过哪个参数,搜索都必须找到结果R 在这种情况下,参数是上面列出的任何表的列值,例如Phonenumber->Provider=Verizon意味着,用户需要Provider=Verizon的所有条目 实际问题不是在特定表中搜索,而是在特定表中

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

表格如下: A、 B、C、D、E、F

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

例如:A->B->A->C->F->D

比如用户->电话号码->国家等

由于用户获得的搜索掩码/表单允许只向服务器发送某些参数,因此无论用户通过哪个参数,搜索都必须找到结果R

在这种情况下,参数是上面列出的任何表的列值,例如Phonenumber->Provider=Verizon意味着,用户需要Provider=Verizon的所有条目

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

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

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

由于所有表都直接或间接地相互关联,因此我们可以访问结果,而无需搜索a或B中的列,只需查看相关表,通过ID/keys/constraints检索相关表上的行,并使用Provider=Verizon和
JOIN
ing即可

目前我做了不止一个查询。 我首先检查参数的类型。 “它们是从A到C的列吗” 是的,然后直接选择a、B或C并将结果作为结果

“它们是E中的列吗?” 是的,然后在E上进行选择,然后在C上从E中选择另一个C_id

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


很抱歉这么复杂

我想,你可以使用
Sphinx搜索引擎
at。您应该设置用于构建搜索索引的SQL查询。从PHP开始,您可以使用简单的API执行搜索。

如果这不是一个选项?在我的一个项目中,我需要国家、县、城市和邮政编码的自动完成功能。为此,我创建了另一个表,其中包含字段
title
(带索引),
城市id
县id
国家id
邮政编码id
。因此,在一个查询中,我只需执行简单的
SELECT
query,其中一个类似于四个,而不是
UNION
JOIN
。当我更新或添加某个实体(城市、国家、县或邮政编码)时,我只需更新/插入表中的值即可自动完成。但这看起来像是Sphinx的工作原理。如果您能够为表A-F提供表设计,详细说明哪些字段将哪些表连接到哪些字段,以及您当前使用的示例查询,那么您可能会发现得到更有用的响应。从根本上讲,听起来好像一些内部连接/左连接/子查询逻辑可以简化您的问题,但您在这个问题上太过神秘。