Php Yii连接子查询,如何添加参数?

Php Yii连接子查询,如何添加参数?,php,sql,yii,Php,Sql,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

我无法使条件参数和表别名正常工作。我需要得到这个查询:

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

在我看来,您是从非常SQL的角度来看这一点,而不是从Yii的角度来看这一点。我建议您学习模型关系和CDbCriteria的功能

请注意,对于CDbCriteria,如果要使用->with函数,请确保包含->together=true

简单的答案可能是执行SQL查询,请尝试以下操作:

$query = "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";

$result = Yii::app()->db->createCommand($sql)->queryAll();

如果有人对答案感兴趣:

$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 = '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);

我只是在->JOIN:///p>中错过了“JOIN”,我不知道为什么,但是将参数分配给$criteria2是解决这个问题的方法。别名仍然有问题…你能检查一下$this->economy->id返回的是什么吗?空值还是什么?我已经记录了economy->id=92和agent->id=6203$条件->参数数组也已选中