Mysql 显示之间的所有日期,即使没有结果

Mysql 显示之间的所有日期,即使没有结果,mysql,count,group-by,Mysql,Count,Group By,我正在生成要显示在折线图中的数据。不幸的是,我不知道如何让上面的查询显示0,该日期可能没有用户注册过。所以目前我的输出可能是这样的: SELECT User_JoinDate, COUNT(User_ID) FROM Users WHERE `User_JoinDate` BETWEEN '2012-11-22' AND '2012-12-06' GROUP BY User_JoinDate ORDER BY User_JoinDate ASC" 但我想要的是 2012-11-22

我正在生成要显示在折线图中的数据。不幸的是,我不知道如何让上面的查询显示0,该日期可能没有用户注册过。所以目前我的输出可能是这样的:

SELECT User_JoinDate, 
COUNT(User_ID) 
FROM Users WHERE `User_JoinDate` 
BETWEEN '2012-11-22' AND '2012-12-06' 
GROUP BY User_JoinDate 
ORDER BY User_JoinDate ASC"
但我想要的是

2012-11-22 - 2 2012-11-25 - 4
我目前有一个工作版本,它将MySQL结果存储到一个数组中,然后PHP循环并填充空白。这看起来很混乱,我希望通过MySQL可以找到解决方案。我对该网站进行了很好的搜索,但很难理解其中的一些实现。有什么建议吗

您可以使用MySQL变量为您想要的所有日期构建一个自动结果集

2012-11-22 - 2 2012-11-23 - 0 2012-11-24 - 0 2012-11-25 - 4 在内部查询中,我只是加入到没有键的users表中,所以它只是用来循环X个记录来表示您想要的日期跨度。。。这可能是30100,随便什么。。。。在本例中,只要表中有一个用户,其记录就与您期望的一样多

然后,除了天数之外的其他结果都被加入到users表中,但这一次,基于用户的加入日期。简单的计数就能得到你想要的

2012-11-22 - 2 2012-11-23 - 0 2012-11-24 - 0 2012-11-25 - 4 AllDaysYouWant是分配给查询的内部第一部分的别名

select
      AllDaysYouWant.MyJoinDate,
      count( U.User_ID ) as NumberJoined
   from
      ( select
              @curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
           from
              ( select @curDate := '2012-11-21' ) sqlvars,
              Users
           limit 18 ) AllDaysYouWant
      LEFT JOIN Users U
         on AllDaysYouWant.MyJoinDate = U.User_JoinDate
   group by
      AllDaysYouWant.MyJoinDate
这基本上是说。。。从users表中,但可以是任意的,通过limit给我18行数据,但可以是几乎任意数量的记录,但您只需要从11月22日到12月6日,这仅仅是14天,但我做了18行,只是出于原则,它几乎可以是任何数据。用户表上方是select@curDate:=“2012-11-21”sqlvars。查询中作为表源包装在括号中的任何select语句都必须提供别名,因为它只是我将要使用的变量,所以不必关心它的名称。因此,该查询在11月21日启动变量,选择@curDate:=Date_Add…blah blah blah状态为获取@curDate的当前值,向其添加1天,现在变为11月22日,并将其存储在返回的行MyJoinDate中。现在,这个内部查询只创建了从11月22日到18天的数据表,并将别名AllDaysYouWant用于查询的其余部分

我已将可能是您遇到的查询调整为alias.field everything以便澄清…

您需要做什么 1.生成日期范围。 2.然后选择在上面的查询结果中不存在的日期
3.并与上面的查询进行联合

它显示了66条记录,只有我超过了120条限制

  ( select
          @curDate := Date_Add(@curDate, interval 1 day) as MyJoinDate
       from
          ( select @curDate := '2012-11-21' ) sqlvars,
          Users
       limit 18 ) AllDaysYouWant

查询没有错误,工作正常

作为一个开始,我将创建一个查询,为您提供所有日期我不确定如何创建,但我确定它在那里,然后与该表进行连接。感谢您的回复。不幸的是,我在“1”附近遇到了一个MySQL语法错误,@curDate作为MyJoinDate从SELECT@curDate:=“2”。@user1883978,修复了。。。SQL Server与MySQL的日期计算。。。查看修订日期\添加内容这可能是我在处理更复杂的查询时完全缺乏知识,但我似乎无法让它工作。我不确定“AllDaysYouWant”是什么,如果我尝试按原样使用查询,它将作为“未知列”失败。谢谢你的帮助@user1883978,使用alias.field引用修改了查询,并澄清了AllDaysYouWantSpot on的内部查询,非常感谢您的帮助和对其工作原理的解释。