Как переделать данный код так, чтобы выполнялся и groupBy и orderBy

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Clasen01
Сообщения: 15
Зарегистрирован: 2018.04.17, 03:44

Как переделать данный код так, чтобы выполнялся и groupBy и orderBy

Сообщение Clasen01 »

Вот код на выборку из таблицы News. Сейчас он не сортирует из за groupBy

Код: Выделить всё

    News::find()
        ->alias("n")
        ->select()
        ->where(
                new Expression("DAY(cdate) = :userDay "
//                                                выборка по региону,
                . "AND MONTH(cdate) = :userMonth "
                . "AND id_region = :id_region "
                . "AND status >= :stat AND n.id NOT IN"
//и чтобы id не совпадало с id из таблицы this_day
                . " (SELECT id_news FROM this_day)",
                //агрументы для бандинга
                [":userDay" => $dateDay,
            ":userMonth" => $currentMoth,
            ":id_region" => REGION_ID,
            ":stat" => 1]))
        ->andWhere(new Expression("YEAR(cdate) "
                . "<> :year", [":year" => ($yearsInThDay !== null) ? end($yearsInThDay) : $dateYear,
        ]))
        ->joinWith("rating nr")
        ->groupBy('YEAR(cdate)')
        ->limit(4 - $countThisDayNew)
        ->orderBy("nr.rate DESC, cdate_int DESC")
        ->all();
Я пробовал подружить эту выборку с чем то вот таким

Код: Выделить всё

    $result = Table::find()
  ->from([
    'new_table' => Table::find()
      ->orderBy([
        'date' => SORT_DESC
      ])
    ])
  ->groupBy('test_id')
  ->all()
Но ничего не вышло, ибо я не знаю как правильно это все объединить, помогите пожалуйста(
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Как переделать данный код так, чтобы выполнялся и groupBy и orderBy

Сообщение andku83 »

структура таблиц и что нужно получить?
Clasen01
Сообщения: 15
Зарегистрирован: 2018.04.17, 03:44

Re: Как переделать данный код так, чтобы выполнялся и groupBy и orderBy

Сообщение Clasen01 »

andku83 писал(а): 2018.04.27, 23:09 структура таблиц и что нужно получить?
Структура у таблицы news вот такая
Изображение

Нужно получить все данные, но сгруппированные по году и отсортированные по полю cdate_int и по связанному полю rate
голый SQL из деббагера:

Код: Выделить всё

 LEFT JOIN `rate_news` `nr` ON `n`.`id` = `nr`.`id_news` 

php код:

Код: Выделить всё

  ->joinWith("rating nr")->orderBy("nr.rate DESC, cdate_int DESC")
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: Как переделать данный код так, чтобы выполнялся и groupBy и orderBy

Сообщение kukuruku »

при использовании groupBy не получится сортировать по обычному полю из базы
Clasen01
Сообщения: 15
Зарегистрирован: 2018.04.17, 03:44

Re: Как переделать данный код так, чтобы выполнялся и groupBy и orderBy

Сообщение Clasen01 »

kukuruku писал(а): 2018.04.28, 07:23 при использовании groupBy не получится сортировать по обычному полю из базы
т.е вариантов вообще никаких нет?
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Как переделать данный код так, чтобы выполнялся и groupBy и orderBy

Сообщение Loveorigami »

сделать подзапрос, отсортировать, а потом - сгруппировать.
Ответить