magento,重新索引目录URL重写时出错

magento,重新索引目录URL重写时出错,magento,url-rewriting,Magento,Url Rewriting,所有这些都是从1.4.1开始的 我收到一条非常具体的错误消息: 下一个异常“Zend_Db_Statement_exception”和消息“SQLSTATE[23000]:完整性约束冲突:1062键“UNQ_CORE_URL_REWRITE_ID_PATH_是/home/in due/domains/sb2.in due.de/public_html/hochzeitsshop/lib/Zend/Db/Statement/Pdo.php:234中的系统_存储_ID” 问题是,我不知道如何找到条目

所有这些都是从1.4.1开始的

我收到一条非常具体的错误消息:

下一个异常“Zend_Db_Statement_exception”和消息“SQLSTATE[23000]:完整性约束冲突:1062键“UNQ_CORE_URL_REWRITE_ID_PATH_是/home/in due/domains/sb2.in due.de/public_html/hochzeitsshop/lib/Zend/Db/Statement/Pdo.php:234中的系统_存储_ID”

问题是,我不知道如何找到条目,这是在制造麻烦。后端(目录| URL重写管理)和数据库本身(表核心| URL |重写)都不是一个条目

产品编号/19-1-2

感谢您的帮助


PAT ERLER

重复条目用于由3个字段组成的密钥,id\u路径、is\u系统和store\u id,理论上,您应该能够使用URL重写管理,搜索产品/19的id\u路径,这是您的“麻烦”字段。删除该值可能会解决这个问题(但我建议先进行备份,然后在开发环境中尝试)


如果您仍在开发中,并且没有使用任何自定义重写,您可以清空core\u url\u rewrite表并重新编制索引以重新生成所有字段。如果它是一个实时站点,这将有点麻烦,如果你重命名了产品,这将意味着失去一点SEO功能,因为你将失去重写功能。

好的,问题是SKU重复。您不应该能够输入SKU,但发生的情况(在magento 1.4.0.1中)是,客户输入了一个很长的SKU,在保存产品时缩短了SKU。然后,缩短的零件与另一个SKU相同


因此,如果您自己有这个问题,请检查数据库中是否存在重复的SKU(有人可以发布SQL查询来执行此操作吗?

@perler,下面是一个用于检测重复SKU的MySQL查询。请记住,如果您在表格前面加上前缀,请相应地更改
catalog\u product\u entity

SELECT
    DISTINCT(`sku`) as `sku`,
    COUNT(`sku`) as `skuCount`,
    entity_id
FROM
    catalog_product_entity
GROUP BY
    `sku`
HAVING
    `skuCount` > 1;

好的,谢谢,我发现id_path product/19(在后端)有多个条目,看起来不太可疑(我们有3个商店视图,其中有三个条目,每个商店一个)。我还是删除了它们(我们在沙箱中),但没有成功。我还有一些产品/190(不是19),但我认为这不是问题所在。删除整个索引是不可能的。不幸的是,三家商店中有5000种产品,这将严重影响谷歌排名。我能猜到的最好情况是,
Mage\u Catalog\u Model\u Url->generatePath()
可能会为同一产品返回两次相同的id\u路径,这将导致重复输入错误。但这应该是不可能的,除非你在商店里有两个1级分类,这是不可能的。您可以尝试运行位于@shell/indexer.php的cli indexer,方法是将光盘刻录到shell/并运行
php indexer.php reindexall
,这可能会有所帮助。或者,如果您正在使用它,您可以尝试在运行reindex之前禁用平面目录类别/产品,以防它们损坏。运行indexer.php reindexall时会出现错误。如何禁用flat_catalog_categories/products?另一种想法是,由于错误消息似乎直接来自MySQL>SQLSTATE[23000]:完整性约束冲突:1062重复条目'product/19-1-2'用于键'UNQ_CORE\u URL\u REWRITE\u ID\u PATH\u IS\u SYSTEM\u STORE\u ID\u是否可以识别数据库中的特定表/调用?这方面的SQL查询是什么(我不太擅长编写SQL查询..)系统>配置>目录>前端>使用平面目录*没问题!我有一个类似的问题,但在我的例子中,它实际上是由指定类别的“级别”属性设置为1而不是子类别中的2引起的。()我有另一家商店,在那里一个扩展开发人员认为我的类别被打破了。也许我也有同样的问题。我怎样才能看到哪个类别在哪个级别,或者它是否在错误的级别?很简单。查看
catalog\u category\u entity
表上的
level
列。选择v.value
category\u name
、c.entity\u id、v.store\u id、v.attribute\u id、a.attribute\u code
attribute\u code
、a.attribute\u id FROM catalog\u category\u entity c LEFT JOIN eav\u attribute a on(a.attribute\u code='name'))左连接目录\u类别\u实体\u varchar v ON(v.entity\u id=c.entity\u id和v.attribute\u id=a.attribute\u id),其中c.level>1,v.store\u id=0,v.attribute\u id按c.entity\u id ASC的顺序不为空;