【问题标题】:magento, error when reindexing Catalog URL Rewritesmagento,重新索引目录 URL 重写时出错
【发布时间】:2012-02-14 23:34:17
【问题描述】:

从 1.4.1 升级后的所有这些

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

下一个异常“Zend_Db_Statement_Exception”和消息“SQLSTATE[23000]:违反完整性约束:1062 /home/in-due/domains/sb2 中键“UNQ_CORE_URL_REWRITE_ID_PATH_IS_SYSTEM_STORE_ID”的重复条目“product/19-1-2”。 in-due.de/public_html/hochzeitsshop/lib/Zend/Db/Statement/Pdo.php:234

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

产品/19-1-2

感谢任何帮助,

帕特·埃勒

【问题讨论】:

    标签: magento url-rewriting


    【解决方案1】:

    重复条目是由 3 个字段组成的键,id_path、is_system 和 store_id,理论上您应该能够使用 URL 重写管理,搜索 product/19 的 id_path,这是您的“麻烦”字段.删除该值可能会解决问题(但我建议先进行备份,然后先在开发环境中尝试)。

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

    【讨论】:

    • 好的,谢谢,我发现了 id_path product/19 的多个条目(在后端),看起来不是很可疑(我们有 3 个商店视图,其中三个条目,每个商店一个) .无论如何我都删除了它们(我们在沙箱中)但没有成功。我还有一些产品/190(不是 19),但不认为这是问题所在。不幸的是,删除整个索引是不可能的,三个商店的5000种产品,这将对谷歌排名造成很大影响。..
    • 我能猜到的最好的情况是Mage_Catalog_Model_Url->generatePath() 可能会为同一产品返回相同的 id_path 两次,这会导致重复输入错误。但这不应该是不可能的,除非你在那家商店里有两个 1 级类别,这是不可能的。您可以尝试运行位于@shell/indexer.php 的cli 索引器,通过cd 进入shell/ 并运行php indexer.php reindexall,这可能会有所帮助。或者,如果您使用它,您可以尝试在运行重新索引之前禁用 flat_catalog_categories/products,以防它们损坏。
    • 运行 indexer.php reindexall 时出现错误。如何禁用 flat_catalog_categories/products ?
    • 另一个想法,因为错误消息似乎直接来自 MySQL >SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'product/19-1-2' for key 'UNQ_CORE_URL_REWRITE_ID_PATH_IS_SYSTEM_STORE_ID 不应该可以识别数据库中的特定表/调用吗?对此的 SQL 查询是什么(我不太擅长制作 SQL 查询..)
    • 系统 > 配置 > 目录 > 前端 > 使用平面目录 *
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      @perler,这是一个用于检测重复 SKU 的 MySQL 查询。请记住,如果您为表格添加前缀,请相应更改 catalog_product_entity

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

      【讨论】:

      • 没问题!我有一个类似的问题,但在我的情况下,它实际上是由分配类别的“级别”属性在子类别中设置为 1 而不是 2 引起的。 (more info)
      • 我有另一家商店,扩展开发人员认为我的类别已损坏。也许我有同样的问题。如何查看哪个类别属于哪个级别或是否属于错误级别?
      • 简单。查看catalog_category_entity 表中的level 列。
      • SELECT v.value category_name, c.entity_id, v.store_id, v.attribute_id, a.attribute_code attribute_code, a.attribute_id FROM catalog_category_entity c LEFT JOIN eav_attribute a ON (a.attribute_code = 'name') LEFT JOIN catalog_category_entity_varchar v ON (v.entity_id = c.entity_id AND v.attribute_id = a.attribute_id) 其中 c.level > 1 AND v.store_id = 0 AND v.attribute_id 不是 NULL ORDER BY c。 entity_id ASC;
      猜你喜欢
      • 2013-11-21
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 2014-06-25
      • 2011-07-21
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多