【发布时间】:2013-03-11 09:37:29
【问题描述】:
我有一个 Mysql 数据库,每天都有一个表,它是这样的:my_table_20130310,my_table_20130311 ...
我想在所有表上进行选择,比如说在“2013/02/02”和“2013/03/28”之间
有一个愚蠢的解决方案,就是把给定的日期变成这样:
'2013/02/02' => 20130202
'2013/03/28' => 20130328
然后转换成 (int) 然后做一个循环:
$dbStartDate = str_replace('/', '', substr($startDate, 0, 10));
$dbEndDate = str_replace('/', '', substr($endDate, 0, 10));
for ($tbDate = $dbStartDate; $tbDate <= $dbEndDate ; $tbDate++) {
$res = 'SELECT * FROM my_table_' . $tbDate ;
...
...
}
但这不是一个解决方案,因为它会尝试解析 20130202 和 20130328 之间的所有数字(20130299、20130245....)
一个想法?
谢谢大家
【问题讨论】:
-
等等。为什么你想每天都有一张桌子?与意义不符。您可以随时使用
GROUP BY按天对数据进行分组。 -
我认为问题的根源在于您每天都有一张桌子。如果您可以更改架构以使日期成为列(索引并可能是键的一部分),您的问题应该会消失。
-
为什么你有单独的表来存储每日数据,为什么不添加一个日期列呢?看起来有点……奇怪。
-
我正在处理的数据非常庞大(我正在编制索引...),所以每天一张表是更好的解决方案
-
也许尝试将开始日期转换为 unix 时间,然后添加 86400 秒并转换回您的 YYYYMMDD 格式,添加到数组,并重复直到它等于结束日期,然后循环结果数组?