2012-05-30 16 views
2

몇 개의 열이있는 범주라는 테이블이 있는데 데이터베이스에서 몇 개만 가져 오려고합니다. 데이터베이스에서 특정 데이터 가져 오기

그래서 나는이 시도했다 :

$sql = 'SELECT uppercat AS id, COUNT(uppercat) AS uppercat FROM category GROUP BY uppercat;'; 
$d = Yii::app()->db->createCommand($sql)->query(); 

하지만 출력이 이상한 찾을 수 있습니다. array_shift를 시도했지만이 배열이 아니라는 오류가 발생합니다. 나는 $ d 개에 위해서 var_dump을 수행 할 때 :

object(CDbDataReader)[38] 
    private '_statement' => 
    object(PDOStatement)[37] 
     public 'queryString' => string 'SELECT uppercat AS id, COUNT(uppercat) AS uppercat FROM category GROUP BY uppercat;' (length=100) 
    private '_closed' => boolean false 
    private '_row' => null 
    private '_index' => int -1 
    private '_e' (CComponent) => null 
    private '_m' (CComponent) => null 

좋아 .. 그럼 내가 $ 아이디에 foreach는 않았다 : 나는 ID를 $ 메시지를받을 수 있나요 것은 배열이 아닌 이유를 다음

array 
    'id' => string '0' (length=1) 
    'uppercat' => string '6' (length=1) 
array 
    'id' => string '3' (length=1) 
    'uppercat' => string '2' (length=1) 
array 
    'id' => string '6' (length=1) 
    'uppercat' => string '1' (length=1) 
array 
    'id' => string '7' (length=1) 
    'uppercat' => string '2' (length=1) 
array 
    'id' => string '9' (length=1) 
    'uppercat' => string '2' (length=1) 

을 배열이 포함되어 있습니까?

내 데이터베이스에서 특정 데이터를 가져 오는 방법에 대한 다른 방법이 있습니까? 그런 다음 해당 데이터베이스에서 array_shift를 수행 할 수 있습니까? 나 또한 findAllBySql을 사용하여이 작업을 시도했지만 COUNT (uppercat)에 내 모델에없는 속성을 연결할 수 없습니다. 내 모델에 추가해야 겠지만 한 번만 필요하기 때문에 마음에 들지 않습니다.

답변

5

CDbCommand의 query은 쿼리 결과를 가져 오기위한 CDbDataReader 개체를 반환합니다. 대신 queryAll을 사용하면 행 배열을 반환합니다.

그러나 CDbCriteria로 모델을 만들면 더 멋지게됩니다 (모델 속성이 필요합니다. 맞습니다).

속성이 countUppercat이라고 가정하면이 모양이됩니다.

$criteria = new CDbCriteria; 
$criteria->select = 'uppercat, COUNT(uppercat) AS countUppercat'; 
$criteria->group = 'countUppercat'; 
$models = CategorieModel::model()->findAll($criteria); 
+0

위대한 작품, 고마워! – ifsession

3

이 .. 그 폐쇄 사용한 approched하는 ...

$sql = 'SELECT uppercat AS id, COUNT(uppercat) AS uppercat FROM categorie GROUP BY uppercat;'; 
$d = Yii::app()->db->createCommand($sql)->queryAll(); 

당신이 당신의 배열 때문에 사용을 표시 할 때 후

,

print_r($d); 

그래서 당신이 얻을 시도 배열 ..

그것은 당신을 위해 ...

관련 문제