今天,当我想要迁移表的历史数据时,我遇到了一个特殊的问题。
我有一个表存储一种类型内容(比如壁纸)的下载次数。这是旧的“下载”表格结构 -
Content_ID Download_Count
1 3
2 5
3 20
4 1
5 7
现在,我意识到此表没有关于何时下载的任何信息。所以,现在我正在创建一个具有以下结构的新表。
Content_ID Download_Time
1 0
1 0
1 0
2 0
2 0
2 0
2 0
2 0
3 0
3 0
3 0 etc
在新表结构中,Content_ID出现的次数将表示下载次数。现在我想将现有数据移动到此表。为此,需要一个查询。查询应该从旧表数据生成新表的数据。例如,如果Content_ID有3次下载,我们需要在新表中插入3条记录。同样,我们需要为Content_ID 2等插入5条记录。如何在查询中生成这样的输出?
我使用mysql。
答案 0 :(得分:2)
使用数字表(从1或0到足够高的值),您可以执行这样的查询。
select d.Content_ID, 0 as Download_Time
from downloads as d
inner join Numbers as N
on N.number between 1 and d.Download_Count;
答案 1 :(得分:1)
我认为只能运行一次查询就无法完成。我能提出的最佳解决方案是这个SQL:
INSERT INTO `new_downloads`(Content_ID)
SELECT o.Content_ID from `old_downloads` o WHERE
(SELECT IFNULL(COUNT(n.Content_ID),0) FROM `new_downloads` n WHERE o.Content_ID =
n.Content_ID) < o.Download_Count
你必须连续运行它,当它完成时它将停止插入记录。
答案 2 :(得分:0)
如果不限于单个查询,则可以使用loop编写存储过程。