2013-02-01 47 views
1

我有一個小問題,我想INSERT INTO mytable的(id_product,id_tag)組合值MySQL的循環,將合併值

我知道的方法是:

INSERT INTO myTable values (value1a, value1b),(value2a, value2b) 

但問題我有934個產品和5個標籤= 4670個組合。所以手動它將需要很長時間才能插入它!我知道的ID有一個產品:

SELECT id_product FROM prodTable 

那麼有誰能夠告訴我我應該做的 -

+0

_所有5個標籤應該放在_all_產品上? –

+0

是對等的(每個產品帶有每個標籤) –

回答

0

我想你需要一個笛卡兒連接:

insert into myTable 
select id_product, id_tag 
from products, tags 

SELECT將選擇所有產品id,c結合所有標籤id,行將被插入到myTable中。

+0

謝謝** @ fthiella **和** @ Joachim Isaksson **你們都很快幫助我。 最終代碼: INSERT INTO'myTable' \t SELECT p.id_product,t.id_tag FROM'prodTable' P,'tagTable'噸 \t \t WHERE t.id_tag> = 64 沒想到,它可以這麼容易解決。這對我來說將是有用的。 謝謝! –

0

您可以使用光標或循環(程序,功能之前,我更新的使用它,直到今天?) 。並結合他們。每一個

一個例子:

-loop

DECLARE y INT DEFAULT 2010; 

cur_year_loop : LOOP 
    IF y=2013 THEN 
     LEAVE cur_year_loop; 
    END IF; 

    ...do things... 

    SET y=y+1; 
END LOOP cur_year_loop; 

-cursor

DECLARE cur_percentages CURSOR FOR SELECT value FROM test_percentages; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done_perc = TRUE; 
OPEN cur_percentages; 
cur_percentages_loop : LOOP 
    IF done_perc THEN 
     CLOSE cur_percentages; 
     LEAVE cur_percentages_loop; 
    END IF; 

    ...do things... 
END LOOP cur_percentages_loop; 
0

如果所有標籤應該對所有的產品,這是相當簡單的(其中1到5五個tag_ids)

INSERT INTO myTable (id_product, id_tag) SELECT id_product, 1 FROM prodTable; 
INSERT INTO myTable (id_product, id_tag) SELECT id_product, 2 FROM prodTable; 
INSERT INTO myTable (id_product, id_tag) SELECT id_product, 3 FROM prodTable; 
INSERT INTO myTable (id_product, id_tag) SELECT id_product, 4 FROM prodTable; 
INSERT INTO myTable (id_product, id_tag) SELECT id_product, 5 FROM prodTable; 

你可以做它在一個刀片和一個工會,但這種方式可能是最清楚。

A simple SQLfiddle

當然,如果你在表格中有標籤,@fthiella的答案就更簡單了。