2013-06-28 44 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和PHP的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等於什麼。我一直試圖根據Php.net網站使用PDO :: FETCH_COLUMN | PDO :: FETCH_GROUP,但它不起作用,因爲我什麼也沒有。

回答

0

Yii的優勢之一是它的ActiveRecord,所以爲什麼不使用它?

將您的預算分配到一個單獨的表格(以便您可以從中生成一個模型)。從你的「數據表」中引用它。

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); 
相關問題