Mysql 按日期列出的Prestashop SQL管理器组
我正在为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
我想按月分组,如下所示:
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中进行测试,一切正常