Mysql 按日期列出的Prestashop SQL管理器组

Mysql 按日期列出的Prestashop SQL管理器组,mysql,prestashop,Mysql,Prestashop,我正在为Prestashop中的SQL管理器编写一些查询。 我想按月分组,如下所示: SELECT AVG(total_products) FROM ps_order_invoice GROUP BY YEAR(delivery_date), MONTH(delivery_date) 但是SQL管理器拒绝保存它,只显示消息“Error” 我找不到有关SQL Manager限制的更多信息,只接受SELECT查询。 但是,如果删除年和月函数,则可以保存查询 注意:很遗憾,我无法访问phpmyadm

我正在为Prestashop中的SQL管理器编写一些查询。
我想按月分组,如下所示:

SELECT AVG(total_products)
FROM ps_order_invoice
GROUP BY YEAR(delivery_date), MONTH(delivery_date)
但是SQL管理器拒绝保存它,只显示消息“Error”

我找不到有关SQL Manager限制的更多信息,只接受
SELECT
查询。
但是,如果删除
函数,则可以保存查询


注意:很遗憾,我无法访问phpmyadmin

我安装了一个新的prestashop-1.6.0.6,并且能够获取您的错误。 在检查代码之后,我发现问题来自RequestSql类

cutAttribute方法无法分析诸如“年(交货日期)”之类的属性。它返回类似“YEARdelivery\u date”的字符串,而不是“delivery\u date”

要解决此问题,可以重写此类并使用上一个可用的prestashop版本中的cutAttribute方法

创建一个名为“RequestSql.php”的文件,该文件位于“override/classes”中,内容如下:
class RequestSql extends RequestSqlCore
{
    /**
     * Cut an attribute with or without the alias
     *
     * @param $attr
     * @param $from
     * @return array|bool
     */
    public function cutAttribute($attr, $from)
    {
        $matches = array();
        if (preg_match('/((`(\()?([a-z0-9_])+`(\))?)|((\()?([a-z0-9_])+(\))?))\.((`(\()?([a-z0-9_])+`(\))?)|((\()?([a-z0-9_])+(\))?))$/i', $attr, $matches, PREG_OFFSET_CAPTURE)) {
            $tab = explode('.', str_replace(array('`', '(', ')'), '', $matches[0][0]));
            if ($table = $this->returnNameTable($tab[0], $from)) {
                return array(
                    'table' => $table,
                    'alias' => $tab[0],
                    'attribut' => $tab[1],
                    'string' => $attr
                );
            }
        } elseif (preg_match('/((`(\()?([a-z0-9_])+`(\))?)|((\()?([a-z0-9_])+(\))?))$/i', $attr, $matches, PREG_OFFSET_CAPTURE)) {
            $attribut = str_replace(array('`', '(', ')'), '', $matches[0][0]);
            if ($table = $this->returnNameTable(false, $from, $attr)) {
                return array(
                    'table' => $table,
                    'attribut' => $attribut,
                    'string' => $attr
                );
            }
        }
        return false;
    }
}

并删除文件“cache/class_index.php”,否则将找不到重写。

是否尝试将group by中的两个值都添加到语句的select部分<代码>选择平均值(总产品)作为ATP,选择年(交货日期)作为yr,选择月(交货日期)作为mo引擎可能会抱怨您试图按未在选择中的字段进行聚合。因此,它不知道是否应该将所有值一起平均,因为不会显示这些值,也不会基于年/月进行平均。您正在向引擎提供互斥指令是,但它仍然拒绝保存查询。查询时出现同样的问题
选择平均值(总产品)作为平均值,从ps\u订单\u发票组中按年份(交货日期)选择年份(交货日期)
是否每个列都有别名?您使用的核心版本是什么?在1.6.1.1中进行测试,一切正常