2014-10-25 3 views
0

데이터베이스의 두 테이블입니다. 첫 번째 tablse는 제품 목록을 포함하고 두 번째 tablse는 옵션 목록을 포함합니다. 한 제품에 대해 여러 가지 옵션이있을 수 있습니다. 내가 YII 쿼리 작성 도구yii에서 다차원 배열을 얻는 방법 'CDbDataReader :: readAll'

SELECT DISTINCT `p`.`id`, 
       `p`.`name`, 
       `pc`.`category_id`, 
       `c`.`name` AS `category_name`, 
       `ov`.`value_str` AS `option_value` 
FROM `cms_product` `p` 
LEFT JOIN `cms_product_category` `pc` ON p.id = pc.product_id 
LEFT JOIN `cms_category` `c` ON c.id = pc.category_id 
LEFT JOIN `cms_product_option_set` `pos` ON p.id = pos.product_id 
LEFT JOIN `cms_option_variant` `ov` ON ov.id=pos.option_variant_id 
ORDER BY `p`.`id` ASC LIMIT 100 

그러나 YII 기능을 다음 질의를 구축 한 'CDbDataReader :: READALL()'각 제품에 대해 하나의 옵션을 반환합니다. MySQL에서이 쿼리를 실행하면 잘 작동합니다. 어떻게

답변

0

사용 queryAll() 방법을 아래와 같이 YII에 바로 결과를 얻을 수 있습니다 다음

$sql="SELECT DISTINCT `p`.`id`, 
      `p`.`name`, 
      `pc`.`category_id`, 
      `c`.`name` AS `category_name`, 
      `ov`.`value_str` AS `option_value` 
FROM `cms_product` `p` 
LEFT JOIN `cms_product_category` `pc` ON p.id = pc.product_id 
LEFT JOIN `cms_category` `c` ON c.id = pc.category_id 
LEFT JOIN `cms_product_option_set` `pos` ON p.id = pos.product_id 
LEFT JOIN `cms_option_variant` `ov` ON ov.id=pos.option_variant_id 
ORDER BY `p`.`id` ASC LIMIT 100"; 

: 이것은 당신에게 결과 배열을 반환합니다

$result=Yii::app()->db->createCommand($sql)->queryAll(); 

.

+0

내 변형 – user2062084

+0

처럼 작동합니다. http://www.yiiframework.com/doc/api/1.1/CDbCommand#queryAll-detail 현재 작동해야합니다! –

관련 문제