Php 帮助构建最佳查询
我有一个表结构,基本上是 已发送\u txts\u父级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父级
已发送\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,我不认为看会有多大帮助;)然而,谷歌,我已经这样做了。