2013-06-28 6 views
0

У меня есть таблица данных с 7 столбцами и 400 записями. Один из них - бюджет. Я хочу, чтобы сгруппировать 400 строк по бюджету, так что я получаю массив так:Как я могу группировать по столбцу в запросе yii?

[budget]=>array(
      [0]=>array(
       [column1]=>'1', 
       [column2]=>'sand' 
      ), 
      [1]=>array(
       [column1]=>'2', 
       [column2]=>'clay' 
      ) 
     ) 
[budget2]=>array(
      [0]=>array(
       [column1]=>'3', 
       [column2]=>'silt' 
      ), 
      [1]=>array(
       [column1]=>'4', 
       [column2]=>'stone' 
      ) 
     ) 

До сих пор я играл с CDbCommand и CdbDataReader Yii и РНР PDOStatement, но ничего не работает правильно. Я пробовал следующий код

public function actionBidCostByBudget(){ 

     $command = Yii::app()->db 
     ->createCommand() 
     ->Select('*') 
     ->From('bid_cost') 
     # ->Query() 
     ; 
     echo '<pre>'; 
     echo get_class($command); 
     $pdostatement=$command->getPdoStatement(); 
     if($pdostatement) echo get_class($pdostatement); 
     # print_r($statement->fetchall(PDO::FETCH_COLUMN|PDO::FETCH_GROUP)); 
     # print_r($command->readall()); 
     # print_r($statement->fetch()); 
     # $columnsArray = BidCost::attributeLabels(); 

     //print_r($rowsArray); 
     //$this->layout='\\layout'; 
} 

Попытки print_r распечатать все с нуля. getPdoStatement ничего не значит. Я пытаюсь использовать PDO :: FETCH_COLUMN | PDO :: FETCH_GROUP в соответствии с веб-сайтом Php.net, но он не работает ни потому, что я ничего не получаю.

ответ

0

Один из сильных сторон Yii - это ActiveRecord, так почему бы не использовать его?

Сделайте свой бюджет на отдельную таблицу (чтобы вы могли создать из нее модель). Ссылка на него с вашего "datatable".

CREATE TABLE budget (
    id INTEGER PRIMARY KEY, 
    name TEXT 
); 

CREATE TABLE datatable(
    column1 TEXT, 
    column2 TEXT, 
    ... 
    budget_id INTEGER, 
    FOREIGN KEY(budget_id) REFERENCES budget(id) 
); 

Следующая генерировать модели с Gii, и теперь вы можете использовать свои новоиспеченных отношения, как это:..

$budget = Budget::model()->findByAttributes(["name"=>"budget2"]); 
foreach($budget->datatables as $dt) { 
    echo $dt->column1; 
    echo $dt->column2; 
} 

(я не знаю, массив вы просили Извините, если я путь с этим.)

+0

Извините, но я не являюсь поклонником ActiveRecord. Это занимает слишком много памяти. Во-вторых, либо вы неправильно поняли мой стол, либо у вас есть ошибка в вашем синтаксисе. Таблица имеет три столбца: ID, Описание, Бюджет; плюс несколько строк (пример: 4). Мне нужен массив, который выводит сначала по бюджету, а затем по значениям столбца для каждой строки. – user139301

0

Хорошо, нижняя строка заключается в том, что я не смог найти способ сделать это прямо через Yii, поэтому я сделал это с более практичным подходом.

Первое, что я сделал, это в основном инициировать подключение к базе данных через Yii.

$command = Yii::app()->db //outputs CDbConnnection 

Следующая вещь, которую я сделал, получить класс PDO из соединения:

$pdoinstance = $command->getPdoInstance(); //outputs PDO class 

С этого момента, она была помощь получена от PHP.net и другой вопрос размещен на этом форуме:

$pdostatement=$pdoinstance->prepare('SELECT BUDGET_CODE, 
PAY_ITEM, ITEM, DESCRIPTION FROM bidcost'); 
$pdostatement->execute(); 
//default fetch mode could not be set 
# $pdostatement->setfetchmode(PDO::FETCH_GROUP|PDO::FETCH_ASSOC); 
//returns array 
$testarray=$pdostatement->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);