我陷入了困境。这是表结构。
默认类别
category_id | parent_id | name | symbol
-----------------------------------------------------------
1 | 1 | SMT Equipment | SMT
2 | 1 | ATE & INSPECTION | ATE
3 | 1 | Feeders | FED
4 | 1 | Rework Station | RWS
5 | 1 | X-Ray Machines | XRM
default_products
id | subcategory_id | product_name | product_code
---------------------------------------------------
1 | 1 | A | null
2 | 1 | B | null
3 | 2 | C | null
4 | 2 | D | null
5 | 1 | E | null
6 | 3 | F | null
7 | 4 | G | null
8 | 1 | H | null
9 | 2 | I | null
default_products_code
id | category_id | code
-------------------------
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
4 | 4 | 1
5 | 5 | 1
现在这里是细节
每当创建类别时,我都会在 default_products_code 中输入一个条目并提供 code = 1 作为默认值。现在,每当插入产品时,我都会从 default_products_code 中获取代码,并从 default_category 中获取符号,并制作这样的代码,例如产品 A 的代码是 SMT0001,然后我将 default_products_code 中的代码更新为 2,因为在 product_code 中分配了 1 . 这就是我目前的系统。但是现在问题来了,我的数据库中有数百种产品,我必须使用我解释的上述标准更新新添加的列。
这是我尝试使用自动增量的查询
SET @var := 1;
UPDATE default_products AS dp
LEFT JOIN(
SELECT
dc.category_id,
CONCAT(symbol, LPAD(@var,5,'0')) AS `code`,
@var := @var+1
FROM default_products AS dp
LEFT JOIN default_category AS dc ON dc.category_id = dp.subcategory_id
WHERE subcategory_id = 1
) AS l ON l.category_id = dp.subcategory_id
SET part_code = l.code
WHERE subcategory_id = 1;
它产生这个结果
id | subcategory_id | product_name | product_code
---------------------------------------------------
1 | 1 | A | SMT00001
2 | 1 | B | SMT00001
5 | 1 | E | SMT00001
8 | 1 | H | SMT00001
虽然我需要这个
id | subcategory_id | product_name | product_code
---------------------------------------------------
1 | 1 | A | SMT00001
2 | 1 | B | SMT00002
5 | 1 | E | SMT00003
8 | 1 | H | SMT00004
另一件事我需要更新表中的所有产品。如何在单个查询中执行此操作。我知道在这种情况下我需要删除 WHERE subcategory_id = 1 但我无法继续。