Creare una query complessa con una vista tabellare

Ciao a tutti,

sono di nuovo qui a chiedere suggerimenti

Con Yii e AR è possibile realizzare il seguente statement che realizzerei in SQL?

for ($contatore=0; $contatore < $lungh_array; $contatore++) {

//echo "$nome[$contatore]";

echo " <tr><td bgcolor=C0C0C0 ALIGN=center>$nome[$contatore]</td>";

//query

$ris = mysql_query ("SELECT COUNT(*) as Totale FROM $tbl_name

where StartDate < ‘$Febbraio’ AND StartDate >=’$Gennaio’ AND class=’$nome[$contatore]’ ;");

if (!$ris)

{

echo &quot;


&lt;tr&gt;&lt;td bgcolor=C0C0C0 ALIGN=center&gt;&#036;nome[&#036;contatore]&lt;/td&gt; &lt;td ALIGN=center&gt;0&lt;/td&gt;&lt;/td&gt; &lt;td ALIGN=center&gt;0&lt;/td&gt;


&lt;td ALIGN=center&gt;0&lt;/td&gt;&lt;td ALIGN=center&gt;0&lt;/td&gt;&lt;td ALIGN=center&gt;0&lt;/td&gt;&lt;/tr&gt; &quot;;

}

$riga2 = mysql_result($ris,0) ;

echo "<td ALIGN=center>$riga2</td></td> ";

//fine query


dove ho già la query base in AR

$criteria1= new CDbCriteria;

$criteria1->select="device_category_id, COUNT( device_category_id) as totale ";

$criteria1->condition= " prj_start_date <= ‘2010-12-01’ AND prj_start_date >=‘2010-11-01’ AND device_category_id=‘1’";

$criteria1->group ="device_category_id";

$totale = Projects::model()->findAll($criteria1);

foreach ($totale as $tot) echo $tot->totale.$tot->device_category_id;

return new CActiveDataProvider(get_class($this), array(

‘criteria’=>$criteria1, ));


ma devo implementarlo ciclando su un array category contenente(0,1,2,3…)

Alla fine devo realizzare una vista a forma di tabella con colonne category Gennaio Febbraio… in cui ogni riga sia il nome della category e ogni mese contenga il count del mese

Volendo posso allegare putput finale realizzato in php standard!

Spero di essere stato chiaro e grazie fin d’ora per i suggerimenti

E’ molto difficile scrivere una query per ottenere tutti i dati in un colpo solo, quello che ti consiglio è di fare una prima query per trovare le varie class.

Poi puoi scrivere una funzione nel model per trovare il totale di un certo mese:





public function getTotaleMese($mese)

{

   $criteria= new CDbCriteria;

   $criteria->condition= " prj_start_date <= '$meseSucc' AND prj_start_date >='$mese' AND device_category_id='{$this->device_category_id}'";

   return ClassName::model()->count($criteria);

}



Questa funzione la puoi chiamare sul model, per cui puoi configurare la CGridView così:




'columns'=>array(

    'device_category_id'

    array(

       'header'=>'Gennaio',

      'data'=>'$data->getTotaleMese(2010-01-01)'

    )

)