2014-11-06 2 views
1

주문이 생성되고 주문이있는 경우 각 주문에 항상 order_product (s)이 표시됩니다. 각 제품에는 OpenCart에서 "옵션"이라고하는 수정 기호 (예 : 셔츠는 S, M, X, XL)가 있고 order_product_options은 고유하기 때문에 order_product_options을 반환하는 쿼리를 생성하고 싶습니다.OpenCart에서 order_product_id가있는 order_product_options를 쿼리

product_optionproduct (내가 원하는 것은 아님)과 상당히 구분합니다. 제품의 제품 옵션을 가져 오는 것은 제품의 모든 수정자를 반환하기 때문에 주문 제품에만 해당되는 것이 아니기 때문에 .

이 쿼리를 수행 할 때 : select * from oc_order_product;, 주 키 order_product_id으로 표시된 주문의 모든 제품을 나열하는 테이블이 나타납니다.

내 목표는 order_product_id을 사용하여 order_product_options을 얻는 것입니다. 그러나 내 시도는 지금까지 실패했습니다.show tables을 사용하여 내 DB를 보면 oc_order_product_option이라는 표가없고 oc_order_option이라는 표가 없습니다.

답변

0

사용할 수 있습니다 이 쿼리 :

private function getModifyByOrderProductId(
     $order_product_id 
    ) 
    { 
     $query = $this->db->query(
      "SELECT oo.product_option_id as id, " . 
      "oo.name as name " . 
      "FROM oc_order_option oo " . 
      "JOIN oc_order_product op " . 
      "ON (oo.order_product_id = op.order_product_id) " . 
      "WHERE op.order_product_id = " . $order_product_id . 
      ";" 
     ); 
     return $query->rows; 
    } 

는 O를 idname 반환 f order_product는 고유 한 수정/옵션을 가질 수 있으므로 주문 제품의 옵션은 order_product_id입니다.

3

단순히 세 개의 표를 결합하면됩니다. 그냥 옵션을 주문 제품을 필요로하지 않는 경우 order, order_productorder_option 테이블

SELECT * 
FROM `order` `o` 
LEFT JOIN `order_product` `op` 
ON `o`.`order_id` = `op`.`order_id` 
LEFT JOIN `order_option` `oo` 
ON `oo`.`order_product_id` = `op`.`order_product_id` 
WHERE `order_id` = 12345 

당신은 완전히 order_product 테이블을 생략하고 그냥 쓰기 제이의 답변을 채택

SELECT * 
FROM `order` `o` 
LEFT JOIN `order_option` `oo` 
ON `oo`.`order_id` = `o`.`order_id` 
WHERE `order_id` = 12345 
관련 문제