DELIMITER $$DROP PROCEDURE IF EXISTS `casino`.`loggamemain`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `loggamemain`()
begin
 declare i int default 1;
 while  i < 31 do
  set @sqlstr = concat(
    'create table loggamemain',
    i,
    '(
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `gmid` int(11) DEFAULT NULL,
  `gid` int(11) DEFAULT NULL,
  `rid` bigint(20) DEFAULT NULL,
  `gmname` varchar(30) DEFAULT NULL,
  `shoeno` bigint(20) DEFAULT NULL,
  `playno` bigint(20) DEFAULT NULL,
  `cast` varchar(100) DEFAULT NULL,
  `result` varchar(20) DEFAULT NULL,
  `logdatetime` datetime DEFAULT NULL,
  `logtype` varchar(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
      )ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8'
   );
  prepare stmt from @sqlstr;
  execute stmt;
  set i = i+1;
 end while;
end$$DELIMITER ;
这个是存储过程的建表语句,可以建31张天表。 我现在麻烦是我传入开始日期和结束日期后,比如我要查询10天,有10张表,跨表查询了这样。 用存储过程怎么写 希望有个大侠能帮忙写一个例子给我 谢谢

解决方案 »

  1.   

    可以用union查询
    不过建议你给表建分区,别分表.
      

  2.   

    MYSQL没有表分区吧 而且现在这个怎么写 能不能写个例子给我
      

  3.   

    方法一:
    生成查询语句select * from loggamemain1
    union all
    select * from loggamemain2
    union all
    ...
    union all
    select * from loggamemain10
      

  4.   

    方法二:使用MERGE存储引擎。
    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  5.   

    方法三:使用分区表。MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html