Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 帮助构建最佳查询_Php_Mysql - Fatal编程技术网

Php 帮助构建最佳查询

Php 帮助构建最佳查询,php,mysql,Php,Mysql,我有一个表结构,基本上是 已发送\u txts\u父级 已发送\u txts\u控制\u父级 已发送\u txts\u控制\u子项 将链接连接在一起作为 已发送\u txts\u父级=顶级 已发送\u txts\u控制\u父链接到已发送\u txts\u父链接通过 Sent\u txts\u control\u parent.parent\u id=Sent\u txts\u parent.id Sent_txts_control_子链接通过 Sent\u txts\u control\u ch

我有一个表结构,基本上是

已发送\u txts\u父级
已发送\u txts\u控制\u父级
已发送\u txts\u控制\u子项

将链接连接在一起作为

已发送\u txts\u父级=顶级

已发送\u txts\u控制\u父链接到已发送\u txts\u父链接通过
Sent\u txts\u control\u parent.parent\u id=Sent\u txts\u parent.id

Sent_txts_control_子链接通过
Sent\u txts\u control\u child.parent\u id=Sent\u txts\u control\u parent.id

我需要运行一个查询,当给定一个
Sent\u txts\u parent.id
时,该查询需要返回
Sent\u txts\u control\u child
中链接到该id的所有行

执行此查询的最佳方式是什么

可能是

Select stcc.* from Sent_txts_control_child stcc
left join Sent_txts_control_parent stcp
on stcc.parent_id = stcp.id
left join Sent_txts_parent stp
on stp.parent_id = stcp.parent_id;

但是我甚至不知道我的连接是否在右侧,也不知道这是否是最优化的。

我看不出有任何理由使用外部连接。简单的解决办法是:

SELECT cc.*
  FROM Sent_txts_control_child  AS cc
  JOIN Sent_txts_control_parent AS cp ON cc.Parent_ID = cp.ID
  JOIN Sent_txts_parent         AS st ON cp.Parent_ID = st.ID
 WHERE st.ID = ?;
但是,我们可以观察到,给定的值对应于Sent_txts_parent.ID,也匹配Sent_txts_control_parent.parent_ID,因此不需要三重连接;我们可以改为使用双连接:

SELECT cc.*
  FROM Sent_txts_control_child  AS cc
  JOIN Sent_txts_control_parent AS cp ON cc.Parent_ID = cp.ID
 WHERE cp.Parent_ID = ?;

问号代表您正在搜索的值。

在JOIN上稍微看一眼就会找到答案如果您可以发布表定义,我可以帮助您进行查询以及一些参考/研究资料BTW@Dagon,我不认为看会有多大帮助;)然而,谷歌,我已经这样做了。