(新用户)通过表A获取的记录集,如下:1   2012-11-1
3   2012-11-2
8   2012-11-5(老用户)通过表B获取的记录集,如下:5   2012-11-1
3   2012-11-2我想将这两个结果集合并为一个结果集。显示的结果如下:日期         新用户    老用户
2012-11-1     1          5
2012-11-2     3          3
2012-11-5     8          0如果不能合并。我就只能在查找注册用户的语句循环中。每次都要通过当前的日期来再做一次查询(统计老用户)。这样的效率也太低。

解决方案 »

  1.   

    mysql> select a.col2, a.id, ifnull(b.id, 0) from newuser a left join olduser b on a.col2=b.col2;
    +------------+------+-----------------+
    | col2       | id   | ifnull(b.id, 0) |
    +------------+------+-----------------+
    | 2012-11-01 |    1 |               5 |
    | 2012-11-02 |    3 |               3 |
    | 2012-11-05 |    8 |               0 |
    +------------+------+-----------------+
    3 rows in set (0.03 sec)
      

  2.   

    select 日期,sum(新用户),sum(老用户)
    from (
    select 日期, n as 新用户, 0 as 老用户 from 表A
    union all
    select 日期, 0 as 新用户, n as 老用户 from 表B
    ) t
    group by 日期
      

  3.   

    select 日期,sum(iif(bz=1,id,0)) as 新用户,sum(iif(bz=2,id,0)) as 老用户
    from (
    select 1 as bz,* from a
    union 
    select 2 as bz,* from b) c
    group by 日期
      

  4.   

    各位朋友可能错误理解我的意思了。可能是我描述不清楚,我把原问题再详细描述一次。
    CREATE TABLE IF NOT EXISTS `user` (
      `userId` int(10) unsigned NOT NULL,
      `password` char(32) NOT NULL COMMENT '用户密码',
      `flag_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `appCount` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '当天应用次数',
      `appAllCount` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '应用总次数',
      `time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '注册时间',
      `date` date NOT NULL COMMENT '注册日期',
      PRIMARY KEY (`userId`),
      KEY `date` (`date`),
      KEY `time` (`time`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE IF NOT EXISTS `user_count` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `userId` int(10) unsigned NOT NULL COMMENT '关联表user表的id字段',
      `appCount` int(10) unsigned NOT NULL DEFAULT '0',
      `time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
      `date` date NOT NULL,
      PRIMARY KEY (`id`),
      KEY `time` (`time`),
      KEY `date` (`date`)
    ) ENGINE=MyISAM AUTO_INCREMENT=155 DEFAULT CHARSET=utf8;上面是这两个表。一天内使用“应用”使用的次数保存在user表的appCount中。如果隔了一天,就把user表中appCount的次数写到表user_count中去。user_count表中time为写入的时间,date为写入日期。当然,如果在同一天内提交的次数,那么user表中appCount的值加上新值,写回appCount中。现在我要显示七天内的注册用户数以及七天内的老用户数。在一个table中显示。就像我开始所提出的问题。即根据user表,我可以统计到七天内的每一天的注册用户数。根据user_count表。我可以统计每一天的老用户数。现在就是如何将这两次读取的数据统一到一个表中显示的问题。
      

  5.   

       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
      

  6.   

    select 日期,sum(新用户),sum(老用户)
    from (
    select 日期,n as 新用户,0 as 老用户 from 表A
    union all
    select 日期,0 as 新用户,0 as 老用户 from 表B
    )a
    group by 日期;