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 timewhen
是一个与一起使用的关键字。看起来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");