同じエンティティのデータベース内の複数の行
この記事では、データベース内の同じエンティティ ID に対して複数の行が存在する問題の解決策を提供します。
影響を受ける製品とバージョン:
- Adobe Commerce(すべてのバージョン)
問題
データベース内に同じエンティティ ID の行が複数あります。
例えば、エンティティ ID が重複するレコードのリストを受け取った後に、次のクエリを実行します。
SELECT * FROM $entityTable WHERE $column = <$entityID> ORDER BY created_in;
カテゴリ/商品/買い物かご価格ルール/カタログ価格ルール/CMSページの $entityID = ID
。
Entity
$entityTable
列($C)
カテゴリ/製品
catalog_category_entity/catalog_product_entity
entity_id
買い物かご価格ルール/カタログ価格ルール
salesrule/catalogrule
rule_id
CMSページ
cms_page
page_id
原因:
これは想定されている動作です。 コンテンツのステージング機能によって、複数の行が作成されます。
-
終了日を指定せずに開始日を指定した場合、同じエンティティ/ルール/ページ ID を持つ行が少なくとも 2 つ存在します。 1 つの行はエンティティの元の状態(
created_in=1
の行)を示し、1 つの行は スケジュールされた更新の終了 を示します。 -
開始日と終了日を指定した場合、同じエンティティ/ルール/ページ ID を持つ行が少なくとも 3 つ存在することになります。 1 つの行はエンティティの元の状態(
created_in=1
の行)、1 つの行は 予定更新の開始、1 つの行は 予定更新の終了 を示します。
例えば、次のクエリの場合:
SELECT row_id, entity_id, created_in, updated_in FROM catalog_product_entity WHERE entity_id = 483 ORDER BY created_in;
created_in
とupdated_in
の値は、次のパターンに従う必要があります。現在の行のcreated_in
値は、前の行のupdated_in
値と等しくなります。 また、最初の行にはcreated_in = 1
を、最後の行にはupdated_in = 2147483647
を含める必要があります。 (行が 1 つしかない場合は、created_in=1
とupdated_in=2147483647
が表示されます)。
2 つ目の DB エントリ(および次のエントリすべて)が同じエンティティの DB に表示されるのはなぜですか?
- 影響を受けるエンティティの 2 つ目の DB レコード(場合によっては次のレコード)は、
Magento_Staging
モジュールを使用してコンテンツステージングの更新がスケジュールされていることを意味します。これにより、各テーブルのエンティティに対して追加のレコードが作成されます。
問題は、レコードの created_in
列または updated_in
列の値が同じ場合にのみ発生します。
解決策
これは想定されている動作で、行間に不一致がある場合にのみ問題が発生します。
関連資料
- カテゴリに対する変更は保存されませんアドビのサポートナレッジベースに保存されます
- Commerce実装プレイブックの データベーステーブルを変更する際のベストプラクティス
recommendation-more-help
8bd06ef0-b3d5-4137-b74e-d7b00485808a