SQL count查询检索0

时间:2015-02-14 20:14:05

标签: php sql

我想列出当前日期和日期之前每个object_id的观看量。 所以,我有这个查询:

SELECT count(*) FROM event_logs WHERE object_id=252 AND object_type='product' AND event_type='view' AND event_date BETWEEN 2014-02-14 AND 2015-02-14 GROUP BY month(event_date)

以下表格:

event_id | user_id | objectd_id | object_type | event_type | event_date
1        | 1       |    252     |   product   | view       | 2014-02-25 00:00:00
2        | 1       |    252     |   product   | view       | 2015-02-12 19:36:05
3        | 1       |    252     |   product   | view       | 2015-01-05 19:36:05

问题是当我执行查询时,显示的结果数量为0(零),

我可能做错了吗?

请帮助并感谢大家的关注!

2 个答案:

答案 0 :(得分:2)

一个问题是event_date常数:

SELECT count(*)
FROM event_logs
WHERE object_id = 252 AND
      object_type = 'product' AND 
      event_type = 'view' AND
      event_date BETWEEN 2014-02-14 AND 2015-02-14
------------------------^ ---------^---^----------^ missing quotes
GROUP BY month(event_date);

日期常量应为单引号。否则,这些被视为算术 - 2014 - 2 - 14 = 1998,这实际上不是一个有效的日期。

此外,如果您想要总价值,则不清楚为何按月分组。您可以使用CURRENT_DATE和日期算术,而不必硬编码日期:

SELECT count(*)
FROM event_logs
WHERE object_id = 252 AND
      object_type = 'product' AND 
      event_type = 'view' AND
      event_date <= CURRENT_DATE and
      event_date > date_sub(CURRENT_DATE, interval -1 year);

根据具体逻辑,您可能希望将<=更改为<或其他任何内容 - 具体取决于您是否要包含结束日期。注意:如果event_date有时间组件,那么您可能希望使用date(event_date)将其删除。

答案 1 :(得分:1)

更改为

BETWEEN '2014-02-14 00:00:00' AND '2015-02-14 23:59:59'