CDbCriteria и MAX

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
LinGG
Сообщения: 4
Зарегистрирован: 2011.09.13, 07:32

CDbCriteria и MAX

Сообщение LinGG »

всем привет, мне нужно сделать запрос который будет выбирать максимальные значения из связанной таблицы и возвращать поля из первой таблицы с этими максимальными значениями-

Код: Выделить всё

SELECT *, MAX(bid_amount) as max FROM `listing` t1 LEFT JOIN `listing_bid` t2 on (t1.id = t2.listing_id) GROUP BY t1.id
простой запорс но возникли сложности с получением данных использу критерию. а именно

Код: Выделить всё

  $criteria->alias = 't1';
                $criteria->together = true;
                $criteria->select = '*, MAX(bid_amount) as max';
                $criteria->join = 'LEFT JOIN `listing_bid` t2 on (t1.id = t2.listing_id)';
                $criteria->group = 't1.id'; 
стэк вызова

Код: Выделить всё

Error 500: <h1>CDbException</h1>
<p>CDbCommand failed to execute the SQL statement: SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'id'. The SQL statement executed was: SELECT COUNT(*) FROM (SELECT *, MAX(bid_amount) as max FROM `listing` t1 LEFT JOIN `listing_bid` t2 on (t1.id = t2.listing_id) GROUP BY t2.listing_id) sq (W:\domains\fyndamore\framework\db\CDbCommand.php:541)</p><pre>#0 W:\domains\fyndamore\framework\db\CDbCommand.php(432): CDbCommand->queryInternal('fetchColumn', 0, Array)
#1 W:\domains\fyndamore\framework\db\ar\CActiveRecord.php(1546): CDbCommand->queryScalar()
#2 W:\domains\fyndamore\framework\web\CActiveDataProvider.php(179): CActiveRecord->count(Object(CDbCriteria))
#3 W:\domains\fyndamore\framework\web\CDataProvider.php(224): CActiveDataProvider->calculateTotalItemCount()
#4 W:\domains\fyndamore\framework\web\CActiveDataProvider.php(129): CDataProvider->getTotalItemCount()
#5 W:\domains\fyndamore\framework\web\CDataProvider.php(168): CActiveDataProvider->fetchData()
#6 W:\domains\fyndamore\protected\controllers\SiteController.php(317): CDataProvider->getData()
#7 W:\domains\fyndamore\framework\web\actions\CInlineAction.php(49): SiteController->actionSearch()
#8 W:\domains\fyndamore\framework\web\CController.php(308): CInlineAction->runWithParams(Array)
#9 W:\domains\fyndamore\framework\web\CController.php(286): CController->runAction(Object(CInlineAction))
#10 W:\domains\fyndamore\framework\web\CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)
#11 W:\domains\fyndamore\framework\web\CWebApplication.php(282): CController->run('search')
#12 W:\domains\fyndamore\framework\web\CWebApplication.php(141): CWebApplication->runController('site/search')
#13 W:\domains\fyndamore\framework\base\CApplication.php(169): CWebApplication->processRequest()
#14 W:\domains\fyndamore\index.php(13): CApplication->run()
#15 {main}</pre>   
сделать 2 запроса и потом добавить айдишники в addinConditoin не получится, так как поле max я собирался использовать для сортировки по этому значению в ClistView, поэтому оно необходимо в запросе.

Заранее спасибо.
Аватара пользователя
lancecoder
Сообщения: 2532
Зарегистрирован: 2012.06.26, 17:16

Re: CDbCriteria и MAX

Сообщение lancecoder »

$criteria->select = '{alias_t1}.*, MAX({alias_t2}.bid_amount) as max';
LinGG
Сообщения: 4
Зарегистрирован: 2011.09.13, 07:32

Re: CDbCriteria и MAX

Сообщение LinGG »

Спасибо огромное!!!!
Ответить