public static function getQuestion($userId = null) { if ($userId) { $db = Yii::app()->db; $_question = []; $all = []; $fields = (double) rand() / (double) getrandmax() > 0.5 ? ['answer' => 'nameRu as answer', 'question' => 'nameEn'] : ['answer' => 'nameEn as answer', 'question' => 'nameRu']; $currentAnswer = Answers::model()->current()->find('userId=?', [$userId]); if ($currentAnswer === null) { $_question = $db->createCommand('SELECT id,' . implode(',', $fields) . ' FROM `Dictonary` WHERE id NOT IN (SELECT dictonaryId From Answers WHERE userId = ' . (int) $userId . ') ORDER BY RAND() LIMIT 1;')->queryRow(); if (isset($_question['id'])) { $currentAnswer = new Answers(); $currentAnswer->userId = $userId; $currentAnswer->dictonaryId = $_question['id']; $currentAnswer->isCurrent = true; if ($currentAnswer->save() === false) { var_dump($currentAnswer->getErrors()); } } } else { $_question = $db->createCommand('SELECT id,' . implode(',', $fields) . ' FROM `Dictonary` WHERE id = ' . $currentAnswer->dictonaryId)->queryRow(); } if (count($_question) > 0) { $question = $_question[$fields['question']]; unset($_question[$fields['question']]); } $all = $db->createCommand()->select('id,' . $fields['answer'])->from('Dictonary')->where('id!=:userId', array(':userId' => $_question['id']))->order('RAND()')->limit(3)->queryAll(); $all[] = $_question; shuffle($all); shuffle($all); if (count($_question) > 0 && count($all) > 0) { return ['success' => true, 'question' => $question, 'answers' => $all, 'error' => ErrorAnswers::getCount(Yii::app()->user->id), 'ok' => Answers::getCount($userId, Answers::FLAG_OK)]; } else { return ['success' => true, 'question' => false, 'answers' => false, 'error' => ErrorAnswers::getCount(Yii::app()->user->id), 'ok' => Answers::getCount($userId, Answers::FLAG_OK)]; } } else { return ['success' => false]; } }