0

実行するとphpmyadminでうまく機能する次のmysqlクエリがあります。

"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 ループを使用する以外のすべての値を取得し、その中で別のクエリを実行することはできますか?

解決策:( 彼のコメントが実際に問題を解決したため、ダニエルズの回答を受け入れます)

    $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;

ps: これは編集作業であり、モデルに触れることは許可されていないため、モデルの関係を使用することはできません。そのため、これに行き着きました

4

1 に答える 1

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();
于 2013-09-02T10:01:49.597 に答える