Mysql根据日期计算行数

时间:2013-03-20 06:49:43

标签: php mysql pdo

好吧,我不知道它应该是什么标题,也不知道如何解释它,但我会尽力解释我的问题。

我的此表包含一些数据,这些数据主要关注 date_participated fblike_point

enter image description here

好吧,我想要的输出应该是

2013-03-20 1

2013-03-19 3

基本上,每个日期都会计算fblike_point的数量

在2013-03-19,它有总共3个fblike_point ,并且在2013-03-20它有总共1个fblike_point

我的问题是,我输出的不是我想要的结果,我得到 2013-03-19 4

的结果

它保持1个日期并计算fblike_point的数量

这是我的代码。

$query = "SELECT DISTINCT date_participated, COUNT(fblike_point) as fblike FROM event_raffles WHERE ticket_id='". $ticket_id ."' AND event_table='". $event_table ."' AND status='1' ORDER BY date_participated DESC";
$result = db_query($query);

foreach ($result as $values) {
    echo $values->date_participated . " " . $values->fblike . "<br>";
}

这个东西有什么解决方案吗?任何帮助,将不胜感激。 :)

3 个答案:

答案 0 :(得分:5)

您应该更改查询以使用GROUP BY而不是DISTINCT

SELECT date_participated, COUNT(fblike_point) as fblike 
FROM event_raffles
GROUP BY date_participated

您使用DISTINCT的方式是获取所有唯一日期,并为每个结果添加整个结果集中返回的记录数量。

使用GROUP BY可以使用该组上的任何可用聚合函数


修改

正如@ysth所提到的,您可能希望使用COUNT而不是使用SUM,具体取决于fblike_point可能具有的值。

使用SUM实际上是更明智的行动方式。

答案 1 :(得分:1)

删除DISTINCT并将ORDER BY替换为GROUP BY

,使用以下查询
$query = "SELECT date_participated, COUNT(fblike_point) as fblike FROM event_raffles WHERE ticket_id='". $ticket_id ."' AND event_table='". $event_table ."' 
AND status='1' GROUP BY date_participated DESC";

答案 2 :(得分:1)

替换

$query = "SELECT DISTINCT date_participated, COUNT(fblike_point) as fblike FROM event_raffles WHERE ticket_id='". $ticket_id ."' AND event_table='". $event_table ."' AND status='1' ORDER BY date_participated DESC";

$query = "SELECT  date_participated, COUNT(fblike_point) as fblike FROM event_raffles WHERE ticket_id='". $ticket_id ."' AND event_table='". $event_table ."' AND status='1' GROUP BY date_participated ORDER BY date_participated DESC";