1

私は毎日のテーブルを備えた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....) までのすべての数値を解析しようとするため、これは解決策ではありません。

アイデア ?

ありがとう

4

2 に答える 2

2

擬似コード:

DateTime startDate = new DateTime('2013-02-02');
DateTime endDate = new DateTime('2013-03-08');

for(DateTime d = startDate; d <= endDate; d = d.Add(new DateInterval('P1D')))
{
    res = 'SELECT * FROM my_table_' . d.format('YYYYmmdd');
    //...
}
于 2013-03-11T09:45:10.730 に答える
1

これを試して:

$dbStartDate = new DateTime('2013/02/02');
$dbEndDate = new DateTime('2013/03/28');
$diff = $dbEndDate->diff($dbStartDate)->days; // get the difference in N days


// just a loop :p
$currentDate = $dbStartDate;
for($i=0;$i<=$diff;$i++){
    $query = 'SELECT * FROM my_table_' . $currentDate->format('Ymd');
    date_add($currentDate, date_interval_create_from_date_string('1 day'));
    // echo $query."<br/>"; // for testing purposes
}
于 2013-03-11T09:59:54.687 に答える