【问题标题】:MySQL loop to inserting combine valuesMySQL循环插入组合值
【发布时间】:2013-02-01 10:01:57
【问题描述】:

我有一个小问题,我想 INSERT INTO myTable (id_product, id_tag) 组合值

我知道方法是:

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

但问题是我有 934 个产品和 5 个标签 = 4670 个组合。所以手动插入它需要很长时间!我知道 id 有什么产品:

SELECT id_product FROM prodTable

那么任何人都可以指导我应该做什么(程序,功能 - 我以前使用它,直到今天?)

【问题讨论】:

  • 所有 5个标签应该出现在所有产品上?
  • 是点对点(每个产品都有每个标签)

标签: mysql loops combinations insert-into


【解决方案1】:

我认为您需要笛卡尔连接:

insert into myTable
select id_product, id_tag
from products, tags

SELECT 将选择所有产品 id,结合所有标签 id,并在 myTable 中插入行。

【讨论】:

  • 感谢 @fthiella@Joachim Isaksson,你们都很快地帮助了我。最终代码:INSERT INTO myTable SELECT p.id_product, t.id_tag FROM prodTable p, tagTable t WHERE t.id_tag >=64 没想到这么容易解决。这对我的未来很有用。谢谢!
【解决方案2】:

您可以使用 CURSORS 或 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;

-光标

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;

【讨论】:

    【解决方案3】:

    如果所有标签都应该出现在所有产品上,那相当简单(其中 1 到 5 是五个 tag_id)

    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 的回答就更简单了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-10
      • 2012-06-19
      • 2022-01-07
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 2015-01-14
      • 2011-05-30
      相关资源
      最近更新 更多