使用MySQL视图在多个通用表中循环

使用MySQL视图在多个通用表中循环,mysql,Mysql,我有几个(日志记录)表,每个月一个,全年12个。 表格模式是:usage_YYYY_MM(即usage_2012_11、usage_2012_12、usage_2013_01等) 我要做的是将这些表的内容合并到一个视图中。有时是一整年,有时是过去的N个月。。 在我看来,我将使用类似的方法: (SELECT order_id, SUM(`usage`) as total, created FROM usage_2012_05 GROUP BY order_id) UNION ALL (SELECT

我有几个(日志记录)表,每个月一个,全年12个。 表格模式是:usage_YYYY_MM(即usage_2012_11、usage_2012_12、usage_2013_01等)

我要做的是将这些表的内容合并到一个视图中。有时是一整年,有时是过去的N个月。。 在我看来,我将使用类似的方法:

(SELECT order_id, SUM(`usage`) as total, created FROM usage_2012_05 GROUP BY order_id)
UNION ALL
(SELECT order_id, SUM(`usage`) as total, created FROM usage_2012_06 GROUP BY order_id)
UNION ALL
(SELECT order_id, SUM(`usage`) as total, created FROM usage_2012_07 GROUP BY order_id)
ORDER BY created;
因为我不想每个月向特定视图添加新表,所以我曾想过在循环中这样做。我一直在四处窥探,并且已经明白我应该使用类似SELECT GROUP_CONCAT的东西。到目前为止,我得到的是:

SET @resultQuery = NULL;

SELECT
  GROUP_CONCAT(
    CONCAT('SELECT order_id, `usage` as used, created FROM ', table_name )
    SEPARATOR '\r\nUNION\r\n'
  )
INTO
  @resultQuery
FROM
  information_schema.`TABLES`
WHERE
  table_name LIKE "usage_%" 
ORDER BY 
    table_name DESC LIMIT 2;

PREPARE stmt FROM @resultQuery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
现在,虽然这确实给出了整个数据集,但最后一位(按表名称描述限制2排序)似乎不起作用。。。所以,我还没有完全做到

是否有理由说明和限制订单不起作用?我应该以不同的方式来处理这个问题吗


顺便说一句:没有寻找关于“用法”表的规范化的善意评论。。我们很清楚这一点,但有特定的(遗留的)原因希望它们像这样。

我将保留此书签,以向人们展示当您不想使用分区时会发生什么。无意冒犯,但这是一个很好的例子,说明了为什么你不想重新发明热水(尽管我确实理解遗留的原因会把整个项目搞得一团糟)。祝你好运,找到解决方案!:)是的,遗产是我这里的主要噩梦。。遗留代码和黑盒....................................................................................什么意思(结果集是相同的,不管限制语句如何。我本来希望使用order_by和limit语句能够获得最新的两个月/三个月或六个月周期。)。。