我把难题简单归结为,跨多张结构一样的表查数据,怎么去实现分页?先说下我这边的分表规则吧这边是一个游戏web后台,现在是对玩家的登陆日志进行分表,分表的规则是按季度分表的,也就是01~03月一张表,04~06月一张表,07~09月一张表,10~12月一张表,表结构就是这样:player_login_01_03player_login_04_06player_login_07_09目前这张表没有player_login_10_12目前这张表没有不过现在是07月份,那么实际就是这样:player_login这个是原表名player_login_01_03player_login_04_06字段SQLplayer_idint用户ID,主键player_namevarchar用户名last_login_timedatetime最后登陆时间.....其他字段现在表已经分了,不过难题来了,web后台有个功能就是根据player_id和last_login_time来查找玩家信息。1.时间不夸表的选择:如果选择的时间段比如是2015-07-0100:00:00~2015-07-3123:59:59或者0015-01-0100:00:00~2015-01-3123:59:59这样的时间段的话就很好实现分页,因为这个时间段是不需要夸表的,按照现在是7月分就直接对应player_login和player_login_01_03就行了。2.时间夸多张的选择:假设选择的时间类似这样的:2015-03-0100:00:00~2015-04-3023:59:59那就需要夸两张表去查询了,有时候可能是更多张表,那用什么方法能实现分页呢?(这个登陆的表一个季度下来数据量很大的,少说每张表也是几百万),我尝试把跨表的数据查询出来用array_slice分,数组过大的时候PHP会提示内存不足的。
2 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
不太理解为什么要按最后登录时间分表,如果同一个用户在4月份登录,然后再7月份又登录了,这里的逻辑应该是怎样的?按我的理解,player_id是主键,那你分完表之后仍然需要保证这一点,所以7月份的表中会多一条数据,而4月份的那个数据应该删掉,但是你的逻辑好像不是这样,不知道我理解的对不对?一半分表都是按照主键分表,保证同一个用户的数据只会落在同一张表中,这样会不会简单一些。
添加回答
举报
0/150
提交
取消