@HellWalk

Как переписать этот SQL запрос на Query Builder?

Есть SQL запрос:

SELECT
    iu.*, u.banned, u.foto,
    (SELECT SUM(rating)/COUNT(*)
        FROM `olit_insurance_reviews`
        WHERE company_id = u.user_id and rating > 0 AND parent_id IS NULL) as rating,
    (SELECT COUNT(*)
        FROM `olit_insurance_reviews`
        WHERE company_id = u.user_id AND parent_id IS NULL) as reviews_count
    FROM `olit_insurance_users` as iu
    INNER JOIN `olit_users` as u
    ON u.user_id = iu.user_id
    WHERE u.user_group = '6' ORDER BY u.banned DESC, iu.company_name ASC


Его нужно переделать в формат вида:
->select('name')->from('table')->where(['like', 'yes']);


Но как это сделать не знаю - видел только простые запросы, а примеров сложных - нет. Как например делаются вложенные селекты, как делаются алгебраические операции?

Может кто-то показать примеры сложных запросов на Query Builder?
  • Вопрос задан
  • 351 просмотр
Пригласить эксперта
Ответы на вопрос 1
@matperez
Посмотрите в доку. Там на большую часть ваших вопросов есть ответы. Вот, например про вложенные селекты:
$subQuery = (new Query())->select('COUNT(*)')->from('user');

// SELECT `id`, (SELECT COUNT(*) FROM `user`) AS `count` FROM `post`
$query = (new Query())->select(['id', 'count' => $subQuery])->from('post');


Если вам модели не требуются, можно использовать просто DAO
$sql = "SELECT
    iu.*, u.banned, u.foto,
    (SELECT SUM(rating)/COUNT(*)
        FROM `olit_insurance_reviews`
        WHERE company_id = u.user_id and rating > :rating AND parent_id IS NULL) as rating,
    (SELECT COUNT(*)
        FROM `olit_insurance_reviews`
        WHERE company_id = u.user_id AND parent_id IS NULL) as reviews_count
    FROM `olit_insurance_users` as iu
    INNER JOIN `olit_users` as u
    ON u.user_id = iu.user_id
    WHERE u.user_group = :userGroup ORDER BY u.banned DESC, iu.company_name ASC";
$cmd = Yii::$app->db->createCommand($sql, [':userGroup' => 6, ':rating' => 0]);
$items = $cmd->queryAll();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы