Параметр Magento group в поле даты

Мне нужно получить общее количество заказов, SUM, MIN MAX и AVG «grand_total» за день в течение определенного месяца. Это то, что я делаю.

$collection->getSelect() ->columns( 'SUM(base_grand_total) AS total' ) ->columns( 'COUNT(*) AS orders_count' ) ->columns( 'DATE_FORMAT(created_at, "%d") AS order_day' ) ->columns( 'DATE_FORMAT(created_at, "%d/%m/%y") AS order_date' ) ->columns( 'AVG(base_grand_total) AS avg_total' ) ->columns( 'MAX(base_grand_total) AS max_total' ) ->columns( 'MIN(base_grand_total) AS min_total' ) ->where( 'DATE_FORMAT(created_at, "%m") = ?', $month ) ->where( 'DATE_FORMAT(created_at, "%Y") = ?', $year ) ->group( 'DATE_FORMAT(created_at, "%d-%m-%y")' ); 

$ month – "Sep", а $ year – "2014"

Текущий выход для вышеуказанного запроса в пользовательской сетке

что Sales> Order говорит за тот же период времени

Вышеуказанный запрос говорит, что на 26-м имеет 3 ордера, но magito's Sales> Order grid говорит, что только один заказ существует на 26-м. Я предполагаю, что ответ лежит внутри « created_at », который хранится как «2014-09-04 02:50:04» в БД, но если мы отформатируем его, это будет «3 сентября 2014 года 16:50:04».

Итак, может ли кто-нибудь предложить, как применять предложение group by date в Collection.

Заранее спасибо.

Это вызвано тем фактом, что Magento анализирует даты из базы данных, чтобы установить их в часовом поясе, установленном в разделе « System > Configuration > General > Locale Options > Timezone . Но фактически сохраняет значения в базе данных в GMT.

Но это информация, которую вы можете получить и конвертировать таким же образом:

Решение 1 : Рассмотрите переход на летнее время, но вам нужно правильно настроить сервер MySQL и правильно настроить часовые пояса.

Чтобы выяснить, загружены ли часовые пояса на вашем сервере, запустите этот запрос

 select * from mysql.time_zone_name; 

Если это вернет вам список часовых поясов, вам должно быть хорошо идти (хотя другие таблицы могут быть заполнены правильно, см. Также этот ответ: https://stackoverflow.com/a/15419843/2123530 )

Если у вас нет записей в этой таблице, обратитесь к руководству MySQL о том, как загрузить эту информацию на свой сервер: http://dev.mysql.com/doc/refman/5.7/en/mysql-tzinfo-to -sql.html

Затем, когда вы все хорошо, это должен быть правильный запрос:

 $GMTToLocaleTZDiff = Mage::getStoreConfig('general/locale/timezone',0); $collection->getSelect() ->columns( 'SUM(base_grand_total) AS total' ) ->columns( 'COUNT(*) AS orders_count' ) ->columns( 'DATE_FORMAT(created_at, "%d") AS order_day' ) ->columns( 'DATE_FORMAT(created_at, "%d/%m/%y") AS order_date' ) ->columns( 'AVG(base_grand_total) AS avg_total' ) ->columns( 'MAX(base_grand_total) AS max_total' ) ->columns( 'MIN(base_grand_total) AS min_total' ) ->columns( "CONVERT_TZ(created_at,'GMT','".$GMTToLocaleTZDiff."') AS created_at" ) ->where( 'DATE_FORMAT(created_at, "%m") = ?', $month ) ->where( 'DATE_FORMAT(created_at, "%Y") = ?', $year ) ->group( 'DATE_FORMAT(created_at, "%d-%m-%y")' ); 

Решение 2. Это может привести к часовому переключению из-за летнего времени

 $GMTToLocaleTZDiff = Mage::getSingleton('core/locale')->storeDate()->get(Zend_Date::GMT_DIFF_SEP); $collection->getSelect() ->columns( 'SUM(base_grand_total) AS total' ) ->columns( 'COUNT(*) AS orders_count' ) ->columns( 'DATE_FORMAT(created_at, "%d") AS order_day' ) ->columns( 'DATE_FORMAT(created_at, "%d/%m/%y") AS order_date' ) ->columns( 'AVG(base_grand_total) AS avg_total' ) ->columns( 'MAX(base_grand_total) AS max_total' ) ->columns( 'MIN(base_grand_total) AS min_total' ) ->columns( "CONVERT_TZ(created_at,'+00:00','".$GMTToLocaleTZDiff."') AS created_at" ) ->where( 'DATE_FORMAT(created_at, "%m") = ?', $month ) ->where( 'DATE_FORMAT(created_at, "%Y") = ?', $year ) ->group( 'DATE_FORMAT(created_at, "%d-%m-%y")' );