0

次の形式の月次 Web 分析の 27 個のテーブルがあります。

+---------------+-------+
| url           | views |
+---------------+-------+
| /foo/bar.php  | 200   |
| /bar/foo.html | 500   |
+---------------+-------+

次のような一意の「url」フィールドを使用して、それらを単一のテーブルに結合する必要があります。

+---------------+---------------+---------------+
| url           | views_2009_01 | views_2009_02 |
+---------------+---------------+---------------+
| /foo/bar.php  | 200           | 700           |
| /bar/foo.html | 500           |               |
| /snafu.html   |               | 500           |
+---------------+---------------+---------------+

これを実現するために、一時テーブルを作成しました。

+---------------+-------+------------+
| url           | views | date       |
+---------------+-------+------------+
| /foo/bar.php  | 200   | 2009-01-01 |
| /bar/foo.html | 500   | 2009-01-01 |
| /foo/bar.php  | 700   | 2009-02-01 |
| /snafu.html   | 500   | 2009-02-01 |
+---------------+-------+------------+

「url」フィールドが一意ではなく、日付フィールドが追加されています。

分析の各テーブルをインポートし、各レコードに日付を追加しました。

次に、次のようにURLのみを最終テーブルにインポートしました。

INSERT IGNORE INTO target (url)
SELECT S.url
FROM temp S;

次に、元の月次テーブルのそれぞれについて、次のように UPDATE を実行しました。

UPDATE temp S, target T
SET T.views_200910 = S.views
WHERE S.url = T.url && S.date = '2009-10-01';

私の質問は、同じ結果を達成するためのよりエレガントな方法はありますか?

前もって感謝します。

4

0 に答える 0