选择查询以根据列值多次获取相同的记录

时间:2011-11-06 17:56:07

标签: mysql sql

今天,当我想要迁移表的历史数据时,我遇到了一个特殊的问题。

我有一个表存储一种类型内容(比如壁纸)的下载次数。这是旧的“下载”表格结构 -

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。

3 个答案:

答案 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编写存储过程。