2016-09-14 121 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