2016-09-14 126 views
1

有人可以找到我爲什麼這個查詢產生語法錯誤嗎?這是一個簡單的廣告數據庫,它包含類別和廣告。該查詢獲取廣告類別列表,並計算廣告的數量和廣告的數量,後者表示廣告不超過2周。 PostgreSQL的說:Postgres COUNT FILTER語法錯誤 - 爲什麼?

達到或接近「(」 5行語法錯誤:篩選器(廣告...^

其他COUNT工作得很好我沒有得到什麼用的它的問題。 !。FILTER條款感謝

$data = pg_query($dbconn, 'SELECT categories.id, 
            categories.name, 
            COUNT(ads.id) AS ads_count, 
            COUNT(ads.id) 
             FILTER (WHERE ads.date > '.strtotime('-2 weeks').') 
             AS ads_active_count 
          FROM erpatak.ads_categories AS categories 
          LEFT JOIN erpatak.ads AS ads ON ads.category = categories.id' 
          .$filter.' 
          GROUP BY categories.id, categories.name 
          ORDER BY name 
          OFFSET '.$offset.' 
          LIMIT '.$maxcount); 
+0

您是否看到在您的錯誤消息中沒有'ads.date',而是有'ads' –

+0

您是否認爲問題是它不知道ads.date應該是什麼? –

+0

請附上正在發送到'pg_query'(不含變量)的完整查詢字符串。另外,你的Postgres服務器版本是什麼? –

回答

0

OK,我找到了解決辦法由於卡米爾G.向我透露,COUNT不能在9.1版本,我這裏有過濾解決方案是:

COUNT(CASE WHEN ads.date > '.strtotime('-2 weeks').' THEN 1 END) AS ads_active_count