gpt4 book ai didi

php - 无法找出 LEFT JOIN 来从左表中获取所有内容,并且不重复 MYSQLI 中右表的结果

转载 作者:行者123 更新时间:2023-11-29 11:31:55 25 4
gpt4 key购买 nike

这是我的代码示例,它从两个 mysql 表中获取信息,相当简单。

一个表包含实现,另一个表包含实现的类型。相关左连接将是 realizes.id = realizes_kind.realization_id,我的实际代码没有左连接,我一直在以一种肮脏的方式这样做。

        $s = $mysqli->prepare( "SELECT id, name FROM realisations" );
$s->execute();
$s->bind_result( $id, $name );
$s->store_result();
while( $s->fetch())
{
/***/
$si = $mysqli->prepare( "SELECT kind FROM realisations_kind WHERE realisation_id = ?" );
$si->bind_param( 'i', $id );
$si->execute();
$si->bind_result( $kind );
$si->store_result();
while( $si->fetch())
{
if(isset($kind)) {
$arrayKind[] = $kind;
}

}

$return[] = array('id' => $id, 'name' => $name, 'kind' => $arrayKind);
$arrayKind = null;
/***/
}

这将输出这样的数组

Array
(
[0] => Array
(
[id] => 1
[name] => Building 1
[kind] => Array
(
[0] => 0
[1] => 1
)

)

[1] => Array
(
[id] => 2
[name] => Building 2
[kind] => Array
(
[0] => 1
)

)

..................more

正如你所看到的,我在索引 0 处得到了“kind”键,得到了 2 个结果,在索引 1 处得到了“kind”1 个结果,这是正确的结果,因为该表有 3 条记录,其中两条记录分配给 id1,一条记录分配给 id2 .

我一直在尝试通过 left join 和 group sql 语句来做到这一点,但我不知道如何做到这一点,我过去曾多次这样做,但我忘记了。现在我在那里问这么基本的事情有点愚蠢。

左连接结果左表所有行结果但重复右表,或者如果我设置分组,它会从右表中删除重复项但不会打印出左表中的所有结果,仅给出第一个:(

最佳答案

当然LEFT JOIN在左表中给出重复项,这就是连接的本质。 SQL 不返回嵌套表。所有内容都合并到一张表中。您必须在 PHP 中构造数据。

SELECT `r`.`id`, `r`.`name`, `k`.`kind`
FROM
`realisations` `r`
LEFT JOIN
`realisations_kind` `k`
ON `k`.`realisation_id` = `r`.`id`
;

PHP 也可以有类似的东西

while( $s->fetch())
{
if(!isset($data[$id]))
{
$data[$id] =
[ 'id' => $id,
'name' => $name,
'kind' => [$kind]
]
}
else
{
$data[$id]['kind'][] = $kind;
}
}

如果您想要一个从零开始的数字数组,只需在循环后执行 $data = array_values($data) 即可。

关于php - 无法找出 LEFT JOIN 来从左表中获取所有内容,并且不重复 MYSQLI 中右表的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37259667/

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