Не знаю, поможет ли вам эта информация, но в книжке по Yii, которую читаю, есть вот такая информация:
Yii 2.0 осуществляет жадную загрузку связи не так, как это было в 1.1. В частности, в версии 1.1 для выбора данных из основной и связанной таблиц будет использован запрос JOIN. В Yii 2.0 будут выполнены два запроса без использования JOIN: первый запрос возвращает данные для основной таблицы, а второй, осуществляющий фильтрацию по первичным ключами основной таблицы для связанной. Вместо того, чтобы при выборке большого количества записей возвращать объекты ActiveRecord, вы можете использовать в построении запроса метод asArray(). Это заставит вернуть результат запроса в виде массива, что при большом количестве записей может существенно снизить затрачиваемое процессорное время и объјм потребляемой памяти. Например:
$customers = Customer::find()->asArray()->all();
Сортировка по умолчанию, но поля такого нет. И он, ни на что не влияет. Сама суть в том, что при JOIN, добавляются лишние поля в YII2 результатирующей таблице, чего не происходит, когда тот же запрос используешь не применяя обертку от YII2. В итоге и подсчеты идут другие, и другие записи выходят в топ и выводятся постетителю.
DiWorm писал(а):Не знаю, поможет ли вам эта информация, но в книжке по Yii, которую читаю, есть вот такая информация:
Yii 2.0 осуществляет жадную загрузку связи не так, как это было в 1.1. В частности, в версии 1.1 для выбора данных из основной и связанной таблиц будет использован запрос JOIN. В Yii 2.0 будут выполнены два запроса без использования JOIN: первый запрос возвращает данные для основной таблицы, а второй, осуществляющий фильтрацию по первичным ключами основной таблицы для связанной. Вместо того, чтобы при выборке большого количества записей возвращать объекты ActiveRecord, вы можете использовать в построении запроса метод asArray(). Это заставит вернуть результат запроса в виде массива, что при большом количестве записей может существенно снизить затрачиваемое процессорное время и объјм потребляемой памяти. Например:
$customers = Customer::find()->asArray()->all();
Спасибо за ответ и полезную информацию. Но я не использую объект ActiveRecord. А использую DB::createCommand, что в теории позволяет использовать чистый sql запросы, огромной вложенности и сложности. Но что-то пошло не так и используя это обертку, результатирующая таблица имеет дополнительный записи, как и почему появляющиеся я не знаю, а по ним уже идет подсчет и дальнейшая сортировка и вывод результата
Так же, было предположение что встречая JOIN - YII2 использует OUTER JOIN, а не INNER JOIN. Но как проверить не знаю. В запросе явно указывал что это INNER JOIN, но опять же на вывод это не влияло.
Yaroslav писал(а):Так же, было предположение что встречая JOIN - YII2 использует OUTER JOIN, а не INNER JOIN. Но как проверить не знаю. В запросе явно указывал что это INNER JOIN, но опять же на вывод это не влияло.
Проверил через консоль, и правый и левый и внутренний и внешний запросы. Не появляются дополнительные записи в и тоговой таблице, а в YII2 появляются и это влияет на результат. Могу предположить, что парсер для DB::createCommand - содержит ошибку, или внутрення логика JOIN содержит не стандартное поведение.