计算在给定日期/时间匹配查询的总结果

时间:2013-12-23 22:46:25

标签: php mysql

我正在尝试从我的数据库中获取结果以用于Google Chart。 MySQL查询:

      $query = "
SELECT DATE_FORMAT(created_at, '%l:%i %p %m-%d-%Y') date
     , COUNT(tweet_id) cnt
  FROM tweets
 WHERE tweet_text LIKE '%$q%'
 GROUP 
    BY DATE_FORMAT(created_at, '%l:%i %p %m-%d-%Y');
";
    $tweets = mysqli_query($db, $query);
    confirm_query($tweets);
    return $tweets;

不幸的是,我在同一分钟内收到了多个条目。如何在同一时间间隔内为所有条目返回累计数字?

以下是print_r返回内容的摘录:

['7:11 PM 12-15-2013', 1],['7:11 PM 12-15-2013', 1],['7:11 PM 12-15-2013', 1],
...
['7:19 PM 12-15-2013', 1],['7:19 PM 12-15-2013', 2],['7:19 PM 12-15-2013', 1],['7:19 PM 12-15-2013', 1],['7:19 PM 12-15-2013', 1]
...

这很接近,但并不完全正确。我期待以下内容:

['7:11 PM 12-15-2013', 3], ..., ['7:19 PM 12-15-2013', 6], ...

另外,在第二组中,您可能已经注意到['7:19 PM 12-15-2013', 2]包含2而不是其他1的值。我不知道为什么。显然,COUNT工作正常,但我遗漏了一些东西。

用英语描述查询,这就是我想要完成的。我想计算与用户查询匹配的所有行,并且我想返回与其各自的created_at日期/时间匹配的总行数。

因此,在2013年12月12日下午7点19分,共有6行包含用户正在搜索的信息。下一个数据点,下午7:20可能有0或更多结果等。显然,如果7:20有0个数据点,它将被排除在结果之外,因为没有匹配的行。

我计划使用与Return counts of 0 from mysql "count()"类似的内容来填补缺失的数据点。但是,首先我需要弄清楚这一部分。

我已经尝试了谷歌,W3学校,当然还有MySQL官方文档,但我似乎是试图将这些数据正确地绘制成图形。

我很想听听社区提出的任何建议。

2 个答案:

答案 0 :(得分:1)

您应该使用与select中的group by相同的格式:

SELECT DATE_FORMAT(created_at, '%l:%i %p %m-%d-%Y') AS date,";
    $query .= " COUNT(tweet_id) AS count FROM `tweets`";
    $query .= " WHERE tweet_text LIKE '%{$q}%'" ;
    $query .= " GROUP BY DATE_FORMAT(created_at, '%l:%i %p %m-%d-%Y')

您的group by按秒汇总。但是,您没有select中的秒数,因此它生成输出字符串,但计数只有一秒钟。

答案 1 :(得分:0)

IRC #mysql给了我一条生命线,让我弄明白了。这是人为错误。在GROUP BY DATE_FORMAT(created_at, '%Y-%d-%m %H:%i:%s'"我将分组缩短到秒。我忘了删除%s。删除后,它现在正如预期正确返回结果。