我可以合并mysql行而不覆盖值吗?

时间:2019-04-16 08:53:41

标签: mysql laravel

因此,我有一个数据库表,其中将试剂盒的成分保存在多行中。这意味着每一行具有相同的KitID,但每一行上都有不同的项(如您在图像上看到的)。DB structure

我想要实现的是在数据表中显示一个Kittype,其中所有组件都在一行中(如果我使用foreach,那么我将获得具有相同ID的多个KitType,而不仅仅是一个)。因此,我的预期结果应如下所示:KitTypeID = 4,ComponentID = 27、28、29和CompAmount = 20、12、23。

我的问题是,是否有一种方法可以让我合并行而不会覆盖componentID和CompAmount。 我无法向数据库中添加更多列,其结构必须像这样。

1 个答案:

答案 0 :(得分:0)

我已经找到了解决方案。

    $results = array();
    foreach($KitTypes as $row => $field) {
      //check if KitTypeID is already set and store the index value it exist within
      $existing_index = NULL;
      foreach($results as $result_row => $result_field) {
        if ($result_field['KitTypeID'] == $field['KitTypeID']) {
          $existing_index = $result_row;
          break;
        }
      }
      if (isset($existing_index)) {
        //the KitTypeID already exist, so add to the existing KitTypeID
        $dataArrayIndex = count($results[$existing_index]['Components']);
        $results[$existing_index]['Components'][$dataArrayIndex]['Product_Name'] = $field['Product_Name'];
        $results[$existing_index]['Components'][$dataArrayIndex]['CompAmount'] = $field['CompAmount'];
      }
      else {
        //the KitTypeID does not exist, create it
        $results_index = count($results);
        $results[$results_index]['KitTypeID'] = $field['KitTypeID'];
        $results[$results_index]['Components'][0]['Product_Name'] = $field['Product_Name'];
        $results[$results_index]['Components'][0]['CompAmount'] = $field['CompAmount'];
      }
    }