我正在尝试从我的数据库中获取结果以用于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官方文档,但我似乎是试图将这些数据正确地绘制成图形。
我很想听听社区提出的任何建议。
答案 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
。删除后,它现在正如预期正确返回结果。