MYSQL根据唯一性

时间:2015-12-14 11:57:28

标签: mysql move

我有一个产品列表,产品选项(例如尺寸)和选项值(例如S / M / L / XL)都存储在一张表中,如下图所示:

enter image description here

当产品只有一个选项集(例如大小)时,这可以正常工作。正如您将看到的那样,产品ID 53有两种类型的选项,分别是size(option_id 11)和color(option_id 13)。

此外,在数据库中我还有最多可以有三种选项的产品,我试图编写一个容纳这些差异的脚本,因为我试图将我的在线商店迁移到另一个系统非常具体地说明了他们收到产品数据的格式。

我正在努力找出解决此问题的正确方法,并以将第2和第3个选项/值集移动到相应的第2和第3列(分别为option_2_name,option_2_value_name和option_3_name,option_3_value_name)的方式编写UPDATE语句,如果它们当然存在于每个产品中。)

为了直观地提供帮助,这里有另一张图片,显示我想要的位置(在本例中),产品53的尺寸选项/值将移至:

enter image description here

你能指点我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

好吧,就像我说的那样,它不是一个普通的表结构,因此对它的操作会很奇怪,我仍在质疑这种方法。但是,您可以使用这些内容转到第2列:

update table_name t1
set option_2_name = option_1_name, option_2_value=option_1_value,
    option_1_name=NULL, option_1_value=NULL
where 
(select count(distinct option_id) 
   from table_name t2 
  where t1.product_id = t2.product_id 
    and t1.option_id > t2.option_id) = 1

和第3栏:

update table_name t1
set option_3_name = option_1_name, option_3_value=option_1_value,
    option_1_name=NULL, option_1_value=NULL
where 
(select count(distinct option_id) 
   from table_name t2 
  where t1.product_id = t2.product_id 
    and t1.option_id > t2.option_id) = 2

等你,你需要更多。

这将进一步推动更高的期权ID。我没有测试它,但它应该运行良好。