在MySQL中将100个值从一个表归档到另一个表的最佳方法?

时间:2013-05-06 07:02:19

标签: php mysql pdo

我有一张包含约100个帐户余额的表(它是变量)。每个帐户一条记录。余额不断更新,但我想找到每天归档当前余额的最佳方式。

我正在寻找最有效的方法。

表模式:

-- --------------------------------------------------------
--
-- Table structure for table `acc_bals`
--
-- Holds the tracks the balances of all coa's and bank accounts
CREATE TABLE IF NOT EXISTS `acc_bals` (
    `id` INT(11) NOT NULL auto_increment,
    `acc_type` TINYINT(4) NOT NULL comment '1 - coa; 2 - bank accounts',
    `acc_id` SMALLINT(5) NOT NULL,
    `acct_balance` VARBINARY(40) NOT NULL,
    PRIMARY KEY (id)
)  engine=InnoDB DEFAULT charset=utf8 auto_increment=1;

--
-- Table structure for table `balance_archive`
--
CREATE TABLE IF NOT EXISTS `balance_archive` (
  `id` mediumint(6) unsigned NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL COMMENT 'Beginning of the day for which this value was archived for..',
  `coa_id` smallint(4) unsigned NOT NULL COMMENT 'Foreign ID of COA.',
  `bal` varbinary(27) NOT NULL COMMENT 'Archived COA balance at beginning of specified date.',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

varbinary列的原因是因为余额是加密的。

我原本打算查询acc_bals并将所有帐户ID和值放入一个数组中,解密了这些值,然后运行第二个查询,对于数组中的每个项目,将其复制到存档中表

然后我发现我可能根本不需要解密这些可以节省大量处理的值,然后可以在单个查询中执行此操作吗?

如果我的方法看似正确,也许有人可以建议该查询的外观如何?

我正在使用MySQL PDO。

1 个答案:

答案 0 :(得分:3)

简单选择将在每天的定期事件集中执行。 类似的东西:

insert into balance_archive (date,coa_id,bal)
select now(),ab.id,ab.acct_balance
from acc_bals ab

这样你根本不需要使用PHP,只能使用MySql。