Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii从相关表中没有记录的表中选择第一条记录_Php_Mysql_Sql_Yii - Fatal编程技术网

Php Yii从相关表中没有记录的表中选择第一条记录

Php Yii从相关表中没有记录的表中选择第一条记录,php,mysql,sql,yii,Php,Mysql,Sql,Yii,我有一个MySQL数据库,有两个表: 问答题有两列: 问题编号pk 问题 测验结果 用户标识fk到用户 问题\u id fk到问题 回答\u id fk回答 我想问下一个没有任何结果的问题。换句话说,在results表中找不到ID的地方获取问题 我发现原始SQL是这样的: SELECT qq.question_id, qq.question FROM quiz_questions qq LEFT JOIN quiz_results qr ON qq.ques

我有一个MySQL数据库,有两个表:

问答题有两列:

问题编号pk 问题 测验结果

用户标识fk到用户 问题\u id fk到问题 回答\u id fk回答 我想问下一个没有任何结果的问题。换句话说,在results表中找不到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;
如何使用模型实现相同的功能


谢谢

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

在问题模型中

    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);
}

希望它能帮上忙,我还没试过,但它可能会给你一个开始的机会

在问题模型中

    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);
}

希望有帮助

你有答案表吗?您说数据库中有两个表,但答案id似乎是答案表的fk。是的,先生,但这与我当前的查询无关,我只想看到有结果的问题,答案只有id和答案的内容。好的,对不起,我现在明白您的意思了,我被搞糊涂了,因为你说..在答案表中找不到ID的地方获取问题。。你可能想编辑它。我会尝试写一个答案。哦,谢谢,我已经更正了。我一直在尝试一些事情,使用关系和范围,我认为,考虑到数据库的结构方式,最好是将查询参数传递给Question::model->find;我无法找到一种只使用AR的方法来有效地完成它。从我的观点来看,数据模型似乎有点奇怪,我认为结果代表了用户选择的问题的答案,如果是这样,怎么会有没有用户id的记录,这不是必需的?你有答案表吗?您说数据库中有两个表,但答案id似乎是答案表的fk。是的,先生,但这与我当前的查询无关,我只想看到有结果的问题,答案只有id和答案的内容。好的,对不起,我现在明白您的意思了,我被搞糊涂了,因为你说..在答案表中找不到ID的地方获取问题。。你可能想编辑它。我会尝试写一个答案。哦,谢谢,我已经更正了。我一直在尝试一些事情,使用关系和范围,我认为,考虑到数据库的结构方式,最好是将查询参数传递给Question::model->find;我无法找到一种只使用AR的方法来有效地完成它。从我的角度来看,数据模型似乎有点奇怪,我认为结果代表了用户对某个问题选择的答案,如果是这样,怎么会有没有用户id的记录,这不是必需的?非常感谢。它确实有帮助,除了我需要修改标准,使result.user_id为NULL或result.user_id 29-29是我正在测试的用户id,它实际上是可变的。当我将条件更改为上述条件时,即使用户已经回答了,它仍然返回该行。你知道为什么吗?我想我知道了。我将条件更改为$criteria->addCondition't.question\u id不在从测验结果中选择question\u id,其中user\u id=29';其中,29是一个可变的用户id。这似乎起到了作用。我还更改了$criteria=newdbcriteria;至$criteria=新的CDB标准;打字错误还有$criteria->with to$criteria->with=array typo?。你的回答很有帮助,非常感谢。嗨,马克,谢谢你的更正,都是打字错误,我编辑了这篇文章来反映你的更正。我还更改了使用当前用户id的条件,从应用程序实例中恢复它。如果这段代码对您有效,请告诉我,它假定用户模型具有用户名属性,该属性用作应用程序的User->name属性。如果你提出更好的解决方案,我可以重新编辑这篇文章。再次感谢您的更正。非常感谢。它确实有帮助,除了我需要修改标准,使result.user_id为NULL或result.user_id 29-29是我正在测试的用户id,它实际上是可变的。当我将条件更改为上述条件时,即使用户已经回答了,它仍然返回该行。你知道为什么吗?我想我知道了。我将条件更改为$criteria->addCondition't.question\u id不在从测验结果中选择question\u id,其中user\u id=29';其中,29是一个可变的用户id。这似乎起到了作用。我还更改了$criteria=newdbcriteria;至$criteria=新的CDB标准;打字错误还有$criteria->with to$criteria->with=array typo?。你的回答很有帮助,非常感谢。嗨,马克,谢谢你的更正,都是打字错误,我编辑了这篇文章来反映你的更正。我还更改了使用当前用户id的条件,从应用程序实例中恢复它。让我来看看 现在,如果这段代码适用于您,那么它假定用户模型具有用户名属性,该属性用作应用程序的User->name属性。如果你提出更好的解决方案,我可以重新编辑这篇文章。再次感谢您的更正。