我有問題獲取標準參數和表別名工作。我需要這樣的語句: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
好吧,我不知道爲什麼,但分配params到$ criteria2是這樣的爲此。別名仍然存在問題... – RobM
你能檢查「$ this-> economy-> id」返回什麼嗎?空或什麼的? –
我已經記錄它economy-> id = 92和agent-> id = 6203. $ criteria-> params數組也檢查 – RobM