【发布时间】:2023-04-06 19:17:01
【问题描述】:
我有一个产品配件的专栏,如下例:
表 1
ProductID accessories
1 2,3
2 1,4,5
3
4 1
5 2
这意味着对于 PRODUCT 2,它的配件产品 ID 为 1,4 和 5
我有下面的最终表 2,如下所示
表2
GRP ProductID accessories
a 2
b 3
c 1
d 4
e 5
所以实际上如果使用 UPDATE 它会是这样的
表2
UPDATE table t2
INNER JOIN table1 t1
On t2.ProductID = t1.ProductID
set t2.accessories = t1.accessories
GRP ProductID accessories
a 2 1,4,5
b 3
c 1 2,3
d 4 1
e 5 2
但我想根据 t2.ProductID 用 GRP 字符更改 t2.accessories 中的 productID,以便最终表看起来像这样。
表2
GRP ProductID accessories
a 2 c,d,e
b 3
c 1 a,b
d 4 c
e 5 a
我真的很困惑如何正确地做到这一点,我可以使用 php 代码来处理这个问题,但是这需要很长时间,因为我有 100k 产品,因此我更喜欢使用一些 group_concat 或 concat_ws 来处理这个
并且一些 t2.accessories 可能已经被存储,因此它应该是不同的值,所以 table2 上没有重复的 t2.accessories
【问题讨论】:
-
这将很难做到,因为您将不得不解析附件字符串以获取每个整数值。如果您完全可以更改数据库架构,则应尽量不要存储逗号分隔的列表。
-
实际上我已经有 2m 行带有逗号分隔的附件。所以如果可以处理那就太好了
-
希望有人知道怎么做,但以后尽量不要那样做。 Here 是关于这个话题的一个非常好的问题。
-
更改数据库的结构。您应该使用多对多关系。
-
所以您建议将逗号分隔字符串的值拆分到另一个表中?
标签: mysql sql group-concat concat-ws