我有 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”字段不是唯一的并添加了一个日期字段。
我导入了每个分析表,并为每条记录附加了一个日期。
然后我只将网址导入到我的决赛桌中,如下所示:
INSERT IGNORE INTO target (url)
SELECT S.url
FROM temp S;
然后,我对每个原始月度表进行了更新,如下所示:
UPDATE temp S, target T
SET T.views_200910 = S.views
WHERE S.url = T.url && S.date = '2009-10-01';
我的问题是,是否有更优雅的方式来实现相同的结果?
提前致谢。