我有一个表A。A里面字段为userID 会员ID(索引)
date    日期(索引)
time    时间(索引)
count 使用次数有一个表user。userId  会员ID(唯一索引)
name  会员姓名
num   当天使用次数
numAll  总使用次数
time     注册时间(索引)
date    注册日期(索引)用户使用终端,使用的次数在终端本地也保存。每天将这统计的次数发到服务器。注意:一天只发1次,最多2次。我采用的方案是:num字段保存当天的统计次数,如果不是同一天(可能是第二天,或第三天了),将num的次数转存到表A中。现在表的数据如下:user表10000   小李   4   4  2012-10-1 xx:xx:xx  2012-10-1
10001   小王   4   14  2012-10-2 xx:xx:xx  2012-10-2
10002   小开   4   34  2012-10-3 xx:xx:xx  2012-10-3B表10001  2012-10-1 02:02:02  2012-10-1  2
10001  2012-10-2 02:02:02  2012-10-2  2
10001  2012-10-3 02:02:02  2012-10-3  2
10001  2012-10-10 02:02:02  2012-10-10  2
10001  2012-10-20 02:02:02  2012-10-20  2现在我要统计:30天内的注册用户和老用户显示的表结构如下:(如果今天是2012-11-1)日期        注册用户    老用户
2012-11-1
2012-10-31
2012-10-30即日期是从今天开始计算,每一天都有。如果那一天没有注册用户,那么那一栏中对应的注册用户数为0请问我该如何实现这功能?我目前的解决方案是:通过PHP循环的方式。假如30天内的情况,我就循环30次。第一次都通过SQL语句,结合计算的当天日期来读取数据。虽然实现功能,但我想,如果数据量大的情况下,比如100万或500万数据,这样的效率岂不是太低了。
如果用一个sql,比如:下面是统计注册用户。
SELECT count(userId),date FROM user WHERE date > DATE_SUB(CURDATE(),INTERVAL 30 DAY) group by date这样,如果那天没有注册用户,那么那一天的日期就不会显示。比如2012-10-1有注册用户。2012-10-2号没有人注册。2012-10-3号有人注册了。那么用上面的sql,就会显示:2012-10-1
2012-10-3而2012-10-2号就没有这一行了。
大家有什么好的方法吗。希望能得到帮助。

解决方案 »

  1.   

    一般是用这种方法,然后在PHP代码中把缺失的日期被上。 做一次查询,然后遍历记录集,当日期不等于上条日期+1,时就在PHP中输出一行。
      

  2.   

    老大。又看到你了。非常感谢。还有一个问题能否在帮我一下。就是新用户和老用户是在不同的表中。目前是两个表user表和A表。user表检测新用户。A表检查老用户。
    我显示的样子为一个表格日期   新用户   老用户
    我如何将两个表的数据合并到一个结果集中。然后遍历显示出来。比如。现在一共有三个日期数据新用户2012-11-11  5
    2012-11-12  6
    2012-11-12  7老用户
    2012-11-11   1
    2012-11-12   2
    我想要显示日期         新用户  老用户
    2012-11-11  5       1
    2012-11-12  6       2
    2012-11-12  7       0要是能帮我解决这个问题,我再加分。感谢老大再次帮我解决。你有QQ吗。要不我远程给你看一下。我QQ:55967659
      

  3.   

    可以实现将两个结果集合并。比如A的结果集有一个字段,B的结果集有一个字段。合并的结果就是两个字段,根据日期来组合。就相当于这样的select a,b from table只不过a的结果来自一个表。b的结果来自另一个表。