3

Magento が製品カタログの再インデックスを拒否しています。このエラーを記録しています:

2013-01-29T23:24:51+00:00 DEBUG (7): Exception message: SQLSTATE[23000]: 
Integrity constraint violation: 1452 Cannot add or update a child row: 
a foreign key constraint fails (`cjsquash_mgnt1`.`catalog_category_product_index`, 
CONSTRAINT `FK_CAT_CTGR_PRD_IDX_CTGR_ID_CAT_CTGR_ENTT_ENTT_ID` FOREIGN KEY (`category_id`) REFERENCES `catalog_category_entity` (`entity_id`))

これは、catalog_category_product_index に無効な行があり、catalog_category_entity テーブルに値が欠落していることを意味すると思いますが、次のクエリを実行しました。

SELECT *
FROM catalog_category_product_index
where category_id not in (select entity_id from 
catalog_category_entity)

0行を返すため、そうではないようです。これを修正するにはどうすればよいですか?

4

2 に答える 2

3

もう少し考えた後、私はこれを自分で理解しました-問題は、product_idまたはcategory_idのいずれかが存在しないcatalog_category_product_indexテーブルに行を挿入しようとするインデックス作成プロセスに起因します。それが違反の原因です。

このステップで失敗したインデックス処理が引き続きクエリを実行して、どの行が問題を引き起こしているかを特定できれば素晴らしいことですが、それが起こるまでは、これら 2 つのクエリを実行して、どの product_id または category_id が問題を引き起こしているかを知ることができます。これらのクエリはどちらも 0 レコードを返す必要があります。彼らがレコードを返す場合、どの製品が存在しないカテゴリにあるか、またはどのカテゴリに存在しない製品があるかを正確に知ることができます。あなたはできる

SELECT * FROM `catalog_category_product` WHERE 
product_id not in (select entity_id from catalog_product_entity)

SELECT * FROM `catalog_category_product` WHERE 
category_id not in (select entity_id from catalog_category_entity)

次に、問題のある行を削除するか、より慎重に、問題のある製品またはカテゴリを編集し、そのカテゴリまたは製品を再保存して、問題のあるテーブルに適切なデータを取得します。その後、インデックス作成が機能します。

于 2013-01-30T09:06:22.127 に答える
0

最初にバックアップを作成します

根本的な修正は、これらの誤った参照をすべて削除することです。

Delete FROM `catalog_category_product` 
WHERE product_id not in (select entity_id from catalog_product_entity) 
  OR category_id not in (select entity_id from catalog_category_entity);

私のために働いたが、あなたのためにいくつかの製品を壊すかもしれません.

于 2015-07-22T09:43:02.850 に答える