Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql+;php:选择按天和用户计数组_Php_Mysql_Sql_Database - Fatal编程技术网

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的方式:注意,你需要返回每个用户的分数,每天!你应该能够通过第一次查询检索用户列表。