Yii中的子查询

时间:2013-09-02 09:48:46

标签: mysql yii

我有以下mysql查询,当我执行它时,它在phpmyadmin中运行良好:

"SELECT * FROM accounts_users WHERE id = ( SELECT teacher_id FROM general_teacher_student_associations WHERE student_id = 509 )";

但是当我通过Yii执行时,它会中断:

    $query          = "SELECT * FROM accounts_users WHERE id = ( SELECT teacher_id FROM general_teacher_student_associations WHERE student_id =509 )";
    $command        = Yii::app()->db->createCommand($query);
    $teachers_list  = $command->query();
    return $teachers_list;

509是动态获取的值。

1。我做错了什么?

2。这可以用更好的方式完成吗?

/******Edited***********/

发现错误:子查询返回多行。我可以使用单个查询来获取除使用foreach循环之外的所有值,然后在执行另一个查询的内部吗?

解决方案:(接受Daniels回答,因为他的评论实际上解决了这个问题)

    $query          = "SELECT * FROM accounts_users WHERE id IN ( SELECT teacher_id FROM general_teacher_student_associations WHERE student_id =509 )";
    $command        = Yii::app()->db->createCommand($query);
    $teachers_list  = $command->queryAll();
    return $teachers_list;

p.s:这是一个版本工作,我不允许触摸模型,因此使用模型关系是窗外的,这就是为什么我最终得到这个

1 个答案:

答案 0 :(得分:1)

尝试:

$teachers_list = Yii::app()->db->createCommand()->select('ausers.*')
        ->from('accounts_users ausers')
        ->join('( SELECT teacher_id FROM general_teacher_student_associations WHERE student_id = 509 ) as teachers ON teachers.teacher_id = ausers.id')
        ->queryRow();