2013-05-31 25 views
0

我試圖根據用戶輸入按天,月或年對查詢的響應進行分組。查找帶別名的語句

要做到這一點,我從log_timeAS when提取日,月,或一年,然後試圖GROUP BY when但CakePHP的說:

SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "when" LINE 1: ...2-31' GROUP BY "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)); 

這是使用Postgres的Cake 2.3.5。有沒有人想出瞭如何做到這一點?

+0

也可以嘗試使用虛擬領域的記錄。這將減少這裏的複雜性。 – mark

+0

感謝您的提示。我更新了我的代碼以使用虛擬域。它現在看起來更清潔,但問題依然存在。我現在要離開我的問題。 – MattL

回答

1

when是與CASE一起使用的關鍵字。看起來像PostgreSQL可以發現select中的when只是一個標識符,但沒有足夠的上下文來找出GROUP BY。我想引用它在這兩個地方:

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

和:

$group = array("\"when\"", "Passenger.route_id", "Route.name"); 
+0

即使我在GROUP BY中引用了「when」,引號也不會將其發送給SQL,從而產生此錯誤:SQLSTATE [42601]:語法錯誤:7 ERROR:語法錯誤處於或接近「when」LINE 1 :... 2-31'GROUP BY「Passenger」,「route_id」,「Route」。「name」,當我更新了我的問題以反映這一點。 – MattL

+0

@MattL:我不知道CakePHP正在做些什麼,也許嘗試使用非保留名稱而不是'when'。 –