0

基本的に、1 日あたりのテーブルを持つデータベースがあります。過去 30 日間のデータを照会する必要があるため、30 のテーブルにわたって select ステートメントを実行する必要があります。

これはphpであり、テーブルはそのように命名されています。

table_01_03_13
table_02_03_13
table_03_03_13
table_04_03_13

etc...

私の質問は、これらのテーブルが日付であることを念頭に置いてこれらのテーブルをクエリする最良の方法は何ですか?クエリ文字列を作成するために過去 30 日間をループしますか? 次のような文字列が得られます。

SELECT * FROM table_01_03_13, table_02_03_13, table_03_03_13, table_04_03_13....

または、これをより迅速かつ簡単に行うための SQL 関数はありますか?

1 日にテーブルが存在する唯一の理由は、毎日 40,000 レコードが DB に追加されるという事実によるものです。

4

3 に答える 3

7

次のような構造ではないのはなぜですか:

create table yourtable (
   id int,
   date_of_event timestamp
   ...
);

そして、あなたは単に持つことができます

SELECT * FROM yourtable
WHERE date_of_event = '2013-04-10'

または特定の日によってさえ:

SELECT * FROM yourtable
WHERE YEAR(date_of_event) < 2013
   AND DAY(date_of_event) = 13

// fetch all the events that occured on 'day 13' or any month in the previous years.
于 2013-04-10T20:24:41.907 に答える
0
<?php
    $tables = '';
    $daysInMonth = 30; // untrue, just an example..
    for($i = 1; $i <= $daysInMonth; $i++)
    {
        if(strlen($i) < 2) $i = str_pad($i, 2, '0', STR_PAD_LEFT);
        if($i===$daysInMonth) $tables .= 'table_' . $i . '_03_13';
        else $tables .= 'table_' . $i . '_03_13, ';
    }
    $query = 'SELECT * FROM ' . $tables;
    echo $query;
?>

出力:

SELECT * FROM table_01_03_13, table_02_03_13, table_03_03_13, table_04_03_13, table_05_03_13, table_06_03_13, table_07_03_13, table_08_03_13, table_09_03_13, table_10_03_13, table_11_03_13, table_12_03_13, table_13_03_13, table_14_03_13, table_15_03_13, table_16_03_13, table_17_03_13, table_18_03_13, table_19_03_13, table_20_03_13, table_21_03_13, table_22_03_13, table_23_03_13, table_24_03_13, table_25_03_13, table_26_03_13, table_27_03_13, table_28_03_13, table_29_03_13, table_30_03_13
于 2013-04-10T20:36:45.623 に答える