Yii从表中选择第一条记录,它在相关表中没有记录

时间:2013-09-28 14:21:17

标签: php mysql sql yii

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

quiz_questions 有两列:

  • question_id(pk)
  • 问题

quiz_results

  • user_id(fk to user)
  • question_id(fk to question)
  • 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;

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

由于

1 个答案:

答案 0 :(得分: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);
}

希望有所帮助