Frage

Ich frage mich, was „inc“ bedeutet?In meinem speziellen Fall ist bei allen Umschreibungen inc=1 gesetzt.

mysql> describe enterprise_url_rewrite;
+----------------+----------------------+------+-----+---------+----------------+
| Field          | Type                 | Null | Key | Default | Extra          |
+----------------+----------------------+------+-----+---------+----------------+
| url_rewrite_id | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| request_path   | varchar(255)         | NO   | MUL | NULL    |                |
| target_path    | varchar(255)         | NO   |     | NULL    |                |
| is_system      | smallint(5) unsigned | NO   |     | NULL    |                |
| guid           | varchar(32)          | NO   |     | NULL    |                |
| identifier     | varchar(255)         | NO   | MUL | NULL    |                |
| inc            | int(10) unsigned     | NO   |     | 1       |                |
| value_id       | int(10) unsigned     | NO   | MUL | NULL    |                |
| store_id       | smallint(5) unsigned | NO   |     | NULL    |                |
| entity_type    | smallint(5) unsigned | NO   |     | NULL    |                |
+----------------+----------------------+------+-----+---------+----------------+
10 rows in set (0.00 sec)

Danke!

War es hilfreich?

Lösung

Im Folgenden geht es ausschließlich um die in dieser Tabelle gespeicherten Produkt-URLs, das Gleiche gilt jedoch auch für Kategorien.Dies dient lediglich dazu, Produkte zu debuggen, und um einfache Beispiele zu finden.

Es gibt nur zwei Stellen, an denen ich diesen Wert finden kann

1.Erhöhen des Zählers

Enterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_RefreshAbstract::_refreshUrlRewrite

In dieser Methode gibt es eine Abfrage zum Aktualisieren der URL-Umschreibung, sie enthält ein bisschen PHP-Code wie:

$insert .= sprintf(' ON DUPLICATE KEY UPDATE %1$s = %1$s + 1',
$this->_getTable('enterprise_urlrewrite/url_rewrite') . '.inc');

Dies trägt dazu bei, eine wirklich unterhaltsam aussehende Abfrage zu generieren

INSERT INTO `enterprise_url_rewrite` (`request_path`, `target_path`, 
`guid`, `is_system`, `identifier`, `value_id`, `store_id`, 
`entity_type`) SELECT `uk`.`value` AS `request_path`, 
CONCAT('catalog/product/view/id/', uk.entity_id) AS `target_path`, 
'66af826f9f0df53191c06afe93c03159' AS `guid`, 1 AS `is_system`, 
`uk`.`value` AS `identifier`, `uk`.`value_id`, `uk`.`store_id`, 3 AS
`entity_type` FROM `catalog_product_entity_url_key` AS `uk` WHERE 
(uk.entity_id IN ('19472')) ON DUPLICATE KEY UPDATE 
enterprise_url_rewrite.inc = enterprise_url_rewrite.inc + 1

Ganz am Ende ist zu beachten, dass dadurch der Zähler erhöht wird, wenn Integritätsbeschränkungsfehler vorliegen.

Wenn Produkte in diese Abfrage aufgenommen werden, bedeutet das, dass Ihnen nach dieser Abfrage der entsprechende Eintrag fehlt enterprise_catalog_product_rewrite.Durch die Suche können Sie prüfen, welche Produkte fehlen select entity_id, sku from catalog_product_entity where entity_id not in(select product_id from enterprise_catalog_product_rewrite);.

Dies liegt daran, dass der Anforderungspfad bereits vorhanden ist enterprise_url_rewrite Für den angegebenen Entitätstyp/Speicher sollte Folgendes angezeigt werden: inc Die Zahl wird bei jeder Ausführung dieser Abfrage erhöht, wenn für diese Entität eine Einschränkungsverletzung vorliegt.

Diese Logik befindet sich in der abstrakten Klasse und diese Methode wird in keiner ihrer untergeordneten Methoden überschrieben, was bedeutet, dass sie konsistent ist

  • Changelog (Mview / Update nach Zeitplan)
  • Zeile (Aktualisierung beim Speichern)
  • Aktualisieren (vollständige Neuindizierung)

Dies bedeutet, dass alle Neuindizierungen für URLs die gleiche Fallback-Logik haben: „Bei Fehler Zähler erhöhen“.

2.Verwendung des Inkrementwerts

Beide der folgenden Anruf parent::_getUrlRewriteSelectSql

  • Enterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_Redirect_Refresh_Row::_getUrlRewriteSelectSql
  • Enterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_Redirect_Refresh_Changelog::_getUrlRewriteSelectSql

Welches ist definiert alsEnterprise_UrlRewrite_Model_Index_Action_Url_Rewrite_Redirect_Refresh::_getUrlRewriteSelectSql

Ist der einzige andere Ort, den ich sehen kann, der das verwendet .inc Wert in der Datenbank.

Diese nennen im Grunde ein insertFromSelect Aussage, und es sieht wirklich gruselig aus wie:

SELECT CONCAT(r.identifier, CASE  WHEN ur.inc IS NULL OR `m`.`value` = 1 THEN '' 
ELSE CONCAT('-', ur.inc) END) AS `request_path`, `r`.`target_path`,
'65912c647bc5f65fc0f59df5f6477d05' AS `guid`, 0 AS `is_system`, 
CONCAT(r.identifier, CASE  WHEN ur.inc IS NULL OR `m`.`value` = 1 
THEN '' ELSE CONCAT('-', ur.inc) END) AS `identifier`, 
`r`.`redirect_id` AS `value_id`, `r`.`store_id`, 1 AS `entity_type`
FROM `enterprise_url_rewrite_redirect` AS `r` LEFT JOIN
enterprise_url_rewrite` AS `ur` ON ur.identifier = r.identifier
AND ur.store_id = r.store_id AND ur.entity_type = 1 LEFT JOIN 
`enterprise_index_multiplier` AS `m` ON ur.identifier IS NOT NULL

Der Schlüsselteil, den ich sehe, istCASE WHEN ur.inc IS NULL ORM.Wert= 1 THEN '' ELSE CONCAT('-', ur.inc) END).Wenn Inkrement null ist, wenden Sie keinen Inkrementwert an, andernfalls verketten Sie ihn mit dem Ende der URL.Diese Abfrage wird in die Logik von Schritt 1 eingespeist, wo es versucht wird _refreshUrlRewrite aber möglicherweise mit einem Zahleninkrement am Ende.

Alles in allem denke ich, dass diese Logik vorhanden ist, um die Nummer zu verfolgen, die am Ende der URL angewendet werden soll, wenn ein Duplikat auftritt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top