Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 使用别名查找语句_Postgresql_Cakephp - Fatal编程技术网

Postgresql 使用别名查找语句

Postgresql 使用别名查找语句,postgresql,cakephp,Postgresql,Cakephp,我试图根据用户输入按天、月或年对查询的响应进行分组 为此,我从log\u time列AS-when中提取日期、月份或年份,然后尝试按when分组,但CakePHP说: SQLSTATE[42601]:语法错误:7错误:语法错误在“when”处或附近,第1行:…2-31'组由“Passenger”组成。“route_id”,“route”,“name”,when^ 下面是我的函数调用示例,其中分组为“月” $fields = array( "CONCAT(DATE_PART('year',

我试图根据用户输入按天、月或年对查询的响应进行分组

为此,我从
log\u time
AS-when
中提取日期、月份或年份,然后尝试
按when
分组,但CakePHP说:

SQLSTATE[42601]:语法错误:7错误:语法错误在“when”处或附近,第1行:…2-31'组由“Passenger”组成。“route_id”,“route”,“name”,when^

下面是我的函数调用示例,其中分组为“月”

$fields = array(
    "CONCAT(DATE_PART('year', \"Passenger\".\"log_time\"), '-', DATE_PART('month', \"Passenger\".\"log_time\")) AS when", 
    "Passenger.route_id", 
    "Route.name", 
    "SUM(Passenger.embarked) AS embarked"
    );
$conditions = array(
    "Passenger.log_time >=" => $start, 
    "Passenger.log_time <=" => $end
    );
$group = array("Passenger.route_id", "Route.name", "\"when\"");

return $this->find('all', array('fields' => $fields, 'conditions' => $conditions, 'group' => $group));
$fields=数组(
“CONCAT(日期部分(‘年’,‘乘客’,‘记录时间’),-’,日期部分(‘月’,‘乘客’,‘记录时间’)作为时间”,
“乘客。路线号”,
“路线名称”,
“已装船金额(乘客)
);
$conditions=数组(
“Passenger.log_time>=”=>$start,

“Passenger.log\u time
when
是一个与一起使用的关键字。看起来PostgreSQL可以在您的
选择中找到
when
只是一个标识符,但没有足够的上下文在
分组中找到它。我在两个地方都引用了它:

"CONCAT(DATE_PART('year', \"Passenger\".\"log_time\"), '-', DATE_PART('month', \"Passenger\".\"log_time\")) AS \"when\"", 
以及:


还可以尝试使用文档中的虚拟字段。这将降低此处的复杂性。感谢您的提示。我更新了代码以使用虚拟字段。现在看起来更干净了,但问题仍然存在。我将暂时保留我的问题。即使我引用“当“在GROUP BY中,引号不在SQL中,从而产生以下错误:
SQLSTATE[42601]:语法错误:7错误:语法错误位于或接近”when“LINE 1:…2-31”GROUP BY“Passenger”。“route_id”,“route”。“name”,当^
我更新了我的问题以反映这一点。@MattL:我不知道CakePHP在搞什么把戏,也许在
时尝试使用非保留名称而不是
$group = array("\"when\"", "Passenger.route_id", "Route.name");