0

我有一个带有两个表的 MySQL 数据库:

quiz_questions有 2 列:

  • question_id (pk)
  • 问题

测验结果

  • user_id (fk 到用户)
  • question_id(提问)
  • answer_id (fk 回答)

我想得到下一个没有任何结果的问题。也就是说,得到结果表中没有找到ID的问题

我发现原始 SQL 是这样的:

SELECT 
    qq.question_id, qq.question
FROM
    quiz_questions qq
LEFT JOIN 
    quiz_results qr
ON 
    qq.question_id = qr.question_id
WHERE
    isNull(qr.user_id)
ORDER BY question_id ASC
LIMIT 1;

如何使用模型实现相同的目标?

谢谢

4

1 回答 1

3

我还没有尝试过,但它可能会给你一个开始的地方。

在问题模型中

    public function relations()
{
    return array(
        'results' => array(self::HAS_MANY, 'Result', 'question_id'),
    );
}

在结果模型中

    public function relations()
{
    return array(
        'question' => array(self::BELONGS_TO, 'Question', 'question_id'),
    );
}

添加一个静态函数来提问

public static function getUnansweredQuestion() {
    $criteria = new CDBCriteria();
    $criteria->with =
        array('result'=>array(
             'select'=>false,
             'together'=>true,  // Do the join but discard the result values
        );
    );
    $criteria->addCondition('t.question_id NOT IN 
        (SELECT question_id FROM quiz_results WHERE user_id = '.
        User::model()->findByAttributes(
            array('username'=>Yii::app()->user->name))->id.')');
    $criteria->limit = 1;
    $criteria->order = 't.id ASC';

    return Question::model()->find($criteria);
}

希望能帮助到你

于 2013-09-28T17:03:09.987 回答