无法弄清楚 LEFT JOIN 从左边 table 获取所有内容并且不要在 MYSQLI 中从右边复制结果

Can't figure out LEFT JOIN to get all from left table and do not duplicate results from right in MYSQLI

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

一个 table 包含实现,另一个包含实现的类型。相关左连接将是 realisations.id = realisations_kind.realisation_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 个结果,这是正确的结果,因为这个 table 得到了3条记录,两条分配给id1,一条分配给id2。

我一直在尝试通过 left join 和 group sql 语句来做到这一点,但我不知道该怎么做,我过去做过几次,但我忘记了。现在我在那里问这么基本的东西有点愚蠢。

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

当然 LEFT JOIN 在左侧给出重复项 table,这就是连接的本质。 SQL 不会 return 嵌套 table。全部合并为一个 table。您必须在 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)