将多个表中的数据合并到具有多个值的数组中

oknrviil  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(493)

在下面的示例中,记录数据加载到网格中的客户端。
表我的车

id   car_name
1      Ford
2      BMW

表1-1详图

id_detail  id_car  country  car_detail
 1           1       USA        red
 2           1       USA        blue
 3           2       GER        green

如果用户选择一行,则记录数据将加载到更新表单中。
必须在客户端接收json格式的数据,格式如下:
第一条记录

car_name : "Ford"  

    my_cars: Array(2)
    0: {id_detail: "1", country: "USA", car_detail: "red"}
    1: {id_detail: "2", country: "USA", car_detail: "blue"}

第二条记录

car_name : "BMW"      

    my_cars: Array()
    0: {id_detail: "1", country: "GER", car_detail: "green"}

我正在努力获取所需格式的\u cars数组值。
如果我只需要从cars\u detail表中获取数据,我会采用以下正确的方法:

$query = "SELECT id_detail, country, car_detail
          FROM cars_detail";

    $statement = $conexion->query($query);

    while($row = $statement->fetch_assoc()) {
        $my_cars[] = array(
              'id_car'=> $row['id_car'],
              'country'=> $row['country'],
              'car_detail'=> $row['car_detail']
            );
    };

但是,我需要从两个表中获取每个记录的数据。
在我的一次尝试中,我尝试在查询中使用group\u concat,然后不知何故,使用explode创建正确的数组。

$query = "SELECT mc.car_name
      GROUP_CONCAT(DISTINCT CONCAT( 'id_detail', ':', cd.id_detail,  'country', ':', cd.country, 'car_detail', ':', cd.car_detail)  SEPARATOR ',')  AS all_detail_values,
      FROM my_cars mc          
      LEFT JOIN cars_detail cd ON mc.id_car = cd.id_car
      LIMIT ?,?";

if ($statement = $conexion->prepare($query)){

  $statement->bind_param("ii", $start, $limit);
  $statement->execute();

  statement->bind_result($car_name, $all_detail_values);

    while($statement->fetch()){

       //This solution does not work correctly
        $values = explode(",", $all_detail_values);
         foreach($values as $value){
            list($key,$val) = explode(" : ", $value);
            $my_cars[][$key] = $val;
         }

        $output[] = array(
            'car_name'=>$car_name,
            'my_cars'=>$my_cars
        );
    };

echo json_encode(array(
    "records_values" => $output
);

解决这类案件最好的办法是什么?
编辑
对不起,如果我没有用最好的方式解释这个问题。这里有一个http://sqlfiddle.com/#!9/456203/11:
我的车必须是数组格式

fjnneemd

fjnneemd1#

我不明白你为什么要这么做 GROUP_CONCAT 是的。简单地列出这个列有什么问题?

SELECT mc.car_name, cd.id_detail, cd.country, cd.car_detail
FROM my_cars mc          
LEFT JOIN cars_detail cd ON mc.id_car = cd.id_car
LIMIT ?,?

相关问题