gpt4 book ai didi

mysql - SQL:从多个表中查询相关数据

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:10 25 4
gpt4 key购买 nike

我有 4 个表,它们都以这样的方式相互关联:TB1 <- TB2 <- TB3 <- TB4这意味着 TB4 保存属于 TB3 中单行的元素,TB3 保存属于 TB2 中单行的元素,最后 TB2 保存属于 TB1 中单行的数据。我做这个插图是为了让它更清楚 enter image description here

(编辑:DB 应该是表中的 TB)

我已经尝试通过使用如下子查询来实现这一点:

SELECT TB1.id AS TB1_ID, 
(SELECT TB2.id AS TB2_ID,
(SELECT TB3.id AS TB3_ID,
(SELECT TB4.id AS TB4_ID
FROM `TB4` AS TB4 WHERE TB4.TB3_id = TB3.id) AS C
FROM `TB3` AS TB3 WHERE TB3.TB2_id = TB2.id) AS B
FROM `TB2` AS TB2 WHERE TB2.TB1_id = TB1.id) AS A
FROM `TB1` AS TB1

但是我的逻辑一定是有缺陷的:或者我在查询相关数据时遗漏了一些东西:因为这返回 null,即使我知道这些表包含进行这种交叉组合所需的必要信息。

期望的结果是一个数组中的一组嵌套数组:每个表一个嵌套数组。这样我们就得到了这样的结构:

{*, A{*, B{*, C{*} } } }

因此,TB1 中的每一行都包含 TB2 中元素的多维数组作为变量,而 TB2 中的每一行都包含 TB3 中元素的多维数组作为元素,依此类推...

我还尝试将所有信息作为单独的查询提取,然后在 JS 中加入它们,但结果却很繁重:所以如果有人知道如何以正确的方式做到这一点,我将不胜感激 - 非常感谢提前

附言。我正在通过使用 XAMPP 在我的本地环境中尝试它:这会产生问题吗?

最佳答案

我想你想要的是一系列JOIN:

SELECT TB1.id AS TB1_ID, TB2.id AS TB2_ID, TB3.id AS TB3_ID, TB4.id AS TB4_ID
FROM TB1
JOIN TB2 ON TB2.TB1_ID = TB1.ID
JOIN TB3 ON TB3.TB2_ID = TB2.ID
JOIN TB4 ON TB4.TB3_ID = TB3.ID

然后您可以使用类似以下内容在 PHP 中构建所需的结构:

$sql = "SELECT TB1.id AS TB1_ID, TB2.id AS TB2_ID, TB3.id AS TB3_ID, TB4.id AS TB4_ID
FROM TB1
JOIN TB2 ON TB2.TB1_ID = TB1.ID
JOIN TB3 ON TB3.TB2_ID = TB2.ID
JOIN TB4 ON TB4.TB3_ID = TB3.ID";
$result = $conn->query($sql) or die($conn->error);
$output = array();
while ($row = $result->fetch_assoc()) {
$tb1_id = $row['TB1_ID'];
$tb2_id = $row['TB2_ID'];
$tb3_id = $row['TB3_ID'];
$tb4_id = $row['TB4_ID'];
if (isset($output[$tb1_id][$tb2_id][$tb3_id])) {
$output[$tb1_id][$tb2_id][$tb3_id][$tb4_id] = array();
}
elseif (isset($output[$tb1_id][$tb2_id])) {
$output[$tb1_id][$tb2_id][$tb3_id] = array($tb4_id => array());
}
elseif (isset($output[$tb1_id])) {
$output[$tb1_id][$tb2_id] = array($tb3_id => array($tb4_id => array()));
}
else {
$output[$tb1_id] = array($tb2_id => array($tb3_id => array($tb4_id => array())));
}
}

关于mysql - SQL:从多个表中查询相关数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54956739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com