(新用户)通过表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如果不能合并。我就只能在查找注册用户的语句循环中。每次都要通过当前的日期来再做一次查询(统计老用户)。这样的效率也太低。
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如果不能合并。我就只能在查找注册用户的语句循环中。每次都要通过当前的日期来再做一次查询(统计老用户)。这样的效率也太低。
+------------+------+-----------------+
| 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)
from (
select 日期, n as 新用户, 0 as 老用户 from 表A
union all
select 日期, 0 as 新用户, n as 老用户 from 表B
) t
group by 日期
from (
select 1 as bz,* from a
union
select 2 as bz,* from b) c
group by 日期
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表。我可以统计每一天的老用户数。现在就是如何将这两次读取的数据统一到一个表中显示的问题。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
from (
select 日期,n as 新用户,0 as 老用户 from 表A
union all
select 日期,0 as 新用户,0 as 老用户 from 表B
)a
group by 日期;