У меня проблема с получением параметров Criteria и псевдонимов таблицы для работы. Мне нужно, чтобы получить этот запрос:Yii Присоединиться к подзапросу, как добавить параметры?
SELECT x.* FROM stl_election x
JOIN (SELECT agent_id, economy_id, MAX(outcome) max_outcome FROM stl_election WHERE economy_id = 92 AND agent_id = 6203 GROUP BY stl_election.economy_id) y
ON y.max_outcome-3 <= x.outcome
AND y.economy_id = x.economy_id
AND y.agent_id = x.agent_id
Я уже сделал это:
$election = StlElection::model();
$criteria = new CDbCriteria;
$criteria->select = "agent_id, economy_id, MAX(outcome) max_outcome";
$criteria->condition = 'agent_id=:agent_id AND economy_id=:economy_id';
$criteria->params = array(
':agent_id' => $agent->id,
':economy_id' => $this->economy->id
);
$criteria->group = 'stl_election.economy_id';
$bestChoiceSql = $election->getCommandBuilder()->createFindCommand($election->getTableSchema(), $criteria)->getText();
$criteria2 = new CDbCriteria;
$criteria2->join = '(' . $bestChoiceSql . ') y ON y.max_outcome-3 <= x.outcome
AND y.economy_id = x.economy_id
AND y.agent_id = x.agent_id';
$criteria2->alias = 'x';
$considerChoices = StlElection::model()->findAll($criteria2);
Выход:
Invalid parameter number: no parameters were bound. The SQL statement executed was: SELECT `t`.`agent_id`, `t`.`party_id`, `t`.`economy_id`, `t`.`outcome` FROM `stl_election` `t` (SELECT agent_id, economy_id, MAX(outcome) max_outcome FROM `stl_election` `t` WHERE agent_id=:agent_id AND economy_id=:economy_id GROUP BY stl_election.economy_id) y ON y.max_outcome-3 <= x.outcome
AND y.economy_id = x.economy_id
AND y.agent_id = x.agent_id
Хорошо, я не знаю почему, но присвоение параметров $ критериям2 является таким Для этого. Еще проблема с псевдонимами ... – RobM
Не могли бы вы проверить, что возвращает «$ this-> economy-> id»? нуль или что-то еще? –
Я зарегистрировал его economy-> id = 92 и agent-> id = 6203. $ criteria-> массив params также отмечен – RobM