私は状況に行き詰まっています。これがテーブル構造です。
default_category
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
デフォルト製品
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 にエントリを作成し、コード = 1 をデフォルト値として提供します。製品が挿入されるたびに、default_products_code からコードを取得し、default_category からシンボルを取得して、たとえば製品 A のコードを次のように作成します。コードは SMT0001 で、product_code に 1 が割り当てられているため、default_products_code のコードを 2 に更新します。 . これが私の現在のシステムです。しかし、データベースに何百もの製品があり、新しく追加された列を上記の基準で更新する必要があるという問題が発生しました。
これは、自動インクリメントで試したクエリです
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
テーブル内のすべての製品を更新する必要があるもう 1 つのこと。単一のクエリでこれを行うにはどうすればよいですか。この場合、WHERE subcategory_id = 1 を削除する必要があることはわかっていますが、続行できません。