php - 如何加入产品和产品变体以获得带有产品名称的每个变体

标签 php mysql join

如何加入产品和产品变体以获取带有产品名称的每个变体。我得到了所有变体,但我的循环每次都使用产品变体重复产品名称。 我的代码是:

    public function viewAllProducts($user_id){
    $SelectProducts_Query = mysqli_query($this->conn, "SELECT smpr.product_id, smpr.user_id, smpr.product_name, smpr.product_sizes, smpr.product_photo, smpr.product_created, smpr.product_updated, smpq.quantity_id, smpq.quantity_product_id, smpq.quantity_user_id, smpq.quantity_available, smpq.quantity_price, smpq.quantity_cost, smpq.quantity_size_name FROM ssm_products_quantity as smpq inner join ssm_products as smpr on smpq.quantity_product_id=smpr.product_id WHERE smpr.user_id = $user_id order by smpr.product_id DESC");
    if($SelectProducts_Query){
        while($view_all_products = mysqli_fetch_array($SelectProducts_Query)){
            $view_all_products_details[] = array(
                "product_id" => $view_all_products["product_id"],
                "product_name" => $view_all_products["product_name"],
                "product_photo" => $view_all_products["product_photo"],
                "product_sizes" => $view_all_products["product_sizes"],
                "product_created_date" => $view_all_products["product_created"],
                "product_updated_date" => $view_all_products["product_updated"],
                "sizes" => array(
                    "size_id" => $view_all_products["quantity_id"],
                    "size_product_id" => $view_all_products["quantity_product_id"],
                    "size_available_id" => $view_all_products["quantity_available"]
                )
            );
        }
        return $view_all_products_details;
    }else{
        return $view_all_products_details = "false";
    }
}

现在我得到这样的记录: enter image description here

我想获取这样的记录:

    {  
    "error":false,
    "products_detail":[  
        {  
            "product_id":"24",
            "product_name":"Miror",
            "product_photo":"product_images\/1-dummy-17-07-11-10-26-06.jpg",
            "product_sizes":"2",
            "product_created_date":"2017-07-11 13:26:06",
            "product_updated_date":"0000-00-00 00:00:00",
            "sizes":{  
                "size_id":"1",
                "size_product_id":"24",
                "size_available_id":"50"
            },{  
                "size_id":"2",
                "size_product_id":"24",
                "size_available_id":"20"
            }
        },
        {  
            "product_id":"25",
            "product_name":"Pipes",
            "product_photo":"product_images\/1-pipes-17-07-11-10-22-08.jpg",
            "product_sizes":"2",
            "product_created_date":"2017-07-11 13:26:06",
            "product_updated_date":"0000-00-00 00:00:00",
            "sizes":{  
                "size_id":"3",
                "size_product_id":"25",
                "size_available_id":"20"
            },{  
                "size_id":"4",
                "size_product_id":"25",
                "size_available_id":"20"
            }
        }
    ]
}

我有什么解决办法吗?

最佳答案

使用您的产品 ID 作为数组索引

试试这个:

public function viewAllProducts($user_id){
  $SelectProducts_Query = mysqli_query($this->conn, "SELECT smpr.product_id, smpr.user_id, smpr.product_name, smpr.product_sizes, smpr.product_photo, smpr.product_created, smpr.product_updated, smpq.quantity_id, smpq.quantity_product_id, smpq.quantity_user_id, smpq.quantity_available, smpq.quantity_price, smpq.quantity_cost, smpq.quantity_size_name FROM ssm_products_quantity as smpq inner join ssm_products as smpr on smpq.quantity_product_id=smpr.product_id WHERE smpr.user_id = $user_id order by smpr.product_id DESC");
  if($SelectProducts_Query){
    while($view_all_products = mysqli_fetch_array($SelectProducts_Query)){
      $pid = $view_all_products["product_id"];
      //check the array for product with id is already exists,
      //if not then add the data to array[pid] without the sizes
      if(!isset($view_all_products_details[$pid]){
        $view_all_products_details[$pid] = array(
            "product_id" => $pid,
            "product_name" => $view_all_products["product_name"],
            "product_photo" => $view_all_products["product_photo"],
            "product_sizes" => $view_all_products["product_sizes"],
            "product_created_date" => $view_all_products["product_created"],
            "product_updated_date" => $view_all_products["product_updated"]
        );
      }
      //add the array "sizes" as multidimensional array
      //you can set the size_id as index too but i think it is not necessary
      $view_all_products_details[$pid]["sizes"][] = array(
          "size_id" => $view_all_products["quantity_id"],
          "size_product_id" => $view_all_products["quantity_product_id"],
          "size_available_id" => $view_all_products["quantity_available"]
      );
    }
    return $view_all_products_details;
  }else{
    return $view_all_products_details = "false";
  }
}

关于php - 如何加入产品和产品变体以获得带有产品名称的每个变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45082756/

相关文章:

mysql - 每个连接的计数 - 优化

mysql - 如何用两个重复的变量过滤mysql

mysql - 对三个表进行计数和求和,获取用户信息及其点赞数

mysql - 连接具有相同列名的多个表

php - 在 Yii 上的 AjaxSubmitButton 之后,如何将局部 View 渲染到 2 个不同的 DIV 中?

mysql - 是否应该在 Group By 中使用 MAX 来检索整行数据

mysql - 获取两个不同日期列的计数并按日期分组

php - Codeigniter 按日期数组排序

如果数组中有任何单词,则匹配字符串的 PHP 代码

php - 如何在 PHP 中获取 DOMDocument 中的特定标签?