Mysql+;php:选择按天和用户计数组
我有下面的表格Mysql+;php:选择按天和用户计数组,php,mysql,sql,database,Php,Mysql,Sql,Database,我有下面的表格 USER COMMENT --------------------- ----------------------- | id | name | id | user_id | date --------------------- ----------------------- | 1 | joe | 1 | 1 | 2014-10-
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
我做了一个简单的左连接查询和双分组,但结果的格式并不像预期的那样
也许,我必须使用php对结果进行排序和合并
感谢您的帮助以下是我的尝试:
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
生成了该列表
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
您的预期结果与您的数据不匹配。乔在10月10日不应该有两条评论吗?是的,对不起,我会修正的。(编辑)像这样的格式化不是MySQLs的工作。您将按日期说明、计数(*)说明、id ASC对其进行排序。在循环浏览结果时,您只观察了日期列中的更改。注释没有主键。这是一个问题。注意:可能是打字错误-
u.I'd
应该是u.id
?:-)@达伦,是的,谢谢!每当我写id
时,拼写自动更正一直困扰着我;这一次我逃过了。好吧,这就是我们在这里的目的@达伦:没有更高的目标吗-(@草莓在你的例子中,它很美味!这是php的方式:注意,你需要返回每个用户的分数,每天!你应该能够通过第一次查询检索用户列表。