Mysql + php:按日和用户选择计数组

时间:2014-07-19 15:55:03

标签: php mysql sql database

我有下表

       USER                      COMMENT
---------------------     -----------------------
 |   id   |   name         | id | user_id | date
---------------------     -----------------------
 |   1    |     joe        | 1  |    1    | 2014-10-10
 |   2    |     jane       | 1  |    1    | 2014-10-10
 |   3    |     ted        | 1  |    3    | 2014-10-11

我的目标是创建统计数据比较图表。所以我想提取每个当前工作日,每个用户添加的评论数量。 预期的数组

-----------------------------
            2014-10-10
-----------------------------
joe  |  2
jane |  0
ted  |  0
------------------------------
            2014-10-11
------------------------------
joe  |  0
jane |  0
ted  |  1

我做了一个简单的左连接查询和双组by,但结果没有按预期格式化。

也许,我必须使用php排序和合并结果?!

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

这是我的尝试:

SELECT c1.date, c1.name, COUNT(c2.date)
FROM (
    SELECT DISTINCT c.date, u.name, u.id
    FROM COMMENT c
    CROSS JOIN USER u) c1
LEFT JOIN COMMENT c2
ON c1.id = c2.user_id AND c1.date = c2.date
GROUP BY c1.date, c1.id

困难在于获取每个日期的所有用户的列表,这是我使用子查询c1生成的。

答案 1 :(得分:1)

我会做的是

Select User.name , Comment.date
From Comment Left Join User On Comment.user_id = User.id
Order By Comment.date Desc

这将返回一个列表,其中包含评论为+日期的用户。

现在我将解析结果集: -

$query = "query above";
$rowset = $db->fetchAll($query);

$result = array();
foreach ($rowset as $row) {
    $result[$row['date']][$row[User]] += 1
}

这会给你一个数组

Date1
    =>user1
      =>count
    =>user2
      =>count
Date2
    =>user3
      =>count
    =>user4
      =>count