0

CDbCriteriaこんにちは、テーブルの値を表示するためにyii を使用しています。MySQL クエリにサブクエリがありました。しかし、$criteriaof yii でサブクエリ条件を記述する方法がわかりませんでした。誰でもこれを行うのに役立ちますか

私のクエリはこのようなものです

select * from (select * from Message order by createdOn desc )as mess group by courseid

編集テーブル構造

id int(11) NOT NULL AUTO_INCREMENT, 
courseid int(11) NOT NULL, 
senderid int(11) NOT NULL, 
recipientid int(11) DEFAULT NULL, 
message text NOT NULL, 
createdOn timestamp NULL DEFAULT CURRENT_TIMESTAMP, 
status tinyint(4) DEFAULT '0', 
fileName text, 
PRIMARY KEY (id) ) 
ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

前もって感謝します ;)

4

4 に答える 4

0

Yii CDbCriteria でテーブルの値をグリッドに表示するのではなく、データ プロバイダー (CActiveDataProvider など) を使用している可能性があります。CSqlDataProvider があることがわかります。CDbCriteria を使用して、SQL の "where" フィルター条件を入力し、プログラムでテーブルを表示することもできます。

http://www.yiiframework.com/doc/api/1.1/CDbCriteria#condition-detail http://www.yiiframework.com/doc/api/1.1/CDbCriteria#params-detail

// your CDbCriteria object:
$criteria = new CDbCriteria();
$criteria->compare('whatever', $this->whatever);


$sql = Yii::app()->db->createCommand()
    ->select('*')
    ->from('(select * from Message order by createdOn desc )as mess')
    ->group('courseid')
// .. any other additions to the query.  
// now adding the conditions from the CDbCriteria
    ->andWhere($criteria->conditions, $criteria->params);

    return new CSqlDataProvider($sql, array(
        'keyField'       => 'id',
        'params'         => $sql->params,
     // the rest is up to you...

お役に立てば幸いです。

于 2014-01-07T02:53:18.150 に答える
0

グループ化している場合、これらの結果にアクティブなレコードを使用していないと思いますか? そうでない場合は、クエリ自体を実行できます。

$sql = "select * from (select * from Message order by createdOn desc )as mess group by courseid"
$rows = Yii::app()->db->createCommand()->text($sql)->execute();

しかし Stu が言ったように、それは非常に非効率的であり、より良い方法がある可能性があります。

更新 結果からアクティブなレコードを取得する必要がある場合は、いつでも使用できますActiveRecord::model()->findBySql()が、マイレージは異なる場合があります

于 2012-11-09T16:31:18.440 に答える
0

CDbExpression を使用する必要があります!!!

例:

$criteria->addBetweenCondition(new CDbExpression('(select nombres 
                                    from personas p 
                                    inner join clientes c on c.id_persona = p.id_persona
                                    where c.id_cliente = t.id_cliente)' ), $model->clienteInicial, $model->clienteFinal);

テストされていません:S、しかし、私はこれがうまくいくと確信しています!!! 私の英語が下手ですみません!!

于 2014-06-28T17:21:26.880 に答える