2011-11-06 79 views
2

當我想要遷移錶的歷史數據時,今天遇到了一個特殊問題。選擇查詢以根據列值多次提取相同記錄

我有一個表,它存儲了一種類型的內容(比如壁紙)的下載次數。這是舊的「下載」表的結構 -

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。

回答

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; 
0

如果不限制爲單個查詢,則可以使用loop編寫存儲過程。

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 

您必須連續運行,這一點,當它完成它只會停止插入記錄。