Bestellungen und Nummernkreise ändern

 13 Kommentare zu diesem Tutorial

Hat man im neuen Shop Testbestellungen vorgenommen die vor dem offiziellen Start gelöscht werden sollen oder man möchte die Nummernkreise ändern, gibt es die Möglichkeit dies direkt in der Datenbank mit MySQL-Befehlen zu tun, über eine Benutzeroberfläche, wie z.B. PhpMyAdmin oder mit einer Extension. Mit den Magento Bordmitteln ist dies nicht möglich. Einen genauen Aufbau der Datenbank finden Sie hier.

Bestellungen und Kunden per SQL löschen

Der MySQL Befehl um Bestellungen und Kunden zu löschen lautet:

SET FOREIGN_KEY_CHECKS=0;
 
-- Hier werden die Bestellungen geloescht
TRUNCATE `sales_flat_order`;
TRUNCATE `sales_flat_order_address`;
TRUNCATE `sales_flat_order_grid`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sales_flat_order_status_history`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_order_payment`;
TRUNCATE `sales_flat_quote_payment`;
TRUNCATE `sales_flat_shipment`;
TRUNCATE `sales_flat_shipment_item`;
TRUNCATE `sales_flat_shipment_grid`;
TRUNCATE `sales_flat_invoice`;
TRUNCATE `sales_flat_invoice_grid`;
TRUNCATE `sales_flat_invoice_item`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;
 
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;
 
-- Hier werden die Kunden geloescht
TRUNCATE `customer_address_entity`;
TRUNCATE `customer_address_entity_datetime`;
TRUNCATE `customer_address_entity_decimal`;
TRUNCATE `customer_address_entity_int`;
TRUNCATE `customer_address_entity_text`;
TRUNCATE `customer_address_entity_varchar`;
TRUNCATE `customer_entity`;
TRUNCATE `customer_entity_datetime`;
TRUNCATE `customer_entity_decimal`;
TRUNCATE `customer_entity_int`;
TRUNCATE `customer_entity_text`;
TRUNCATE `customer_entity_varchar`;
TRUNCATE `log_customer`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;
 
ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `log_customer` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;
 
-- Hier werden die ID-Zaehler zurueckgesetzt
TRUNCATE `eav_entity_store`;
ALTER TABLE `eav_entity_store` AUTO_INCREMENT=1;
 
SET FOREIGN_KEY_CHECKS=1;

Nummernkreise ändern

In der Tabelle eav_entity_store sind die Bestell- und Rechnungsnummern hinterlegt. Der wichtigste Teil hierbei ist die increment_last_id, denn das ist die Startnummer der Nummernkreise. Mit folgendem MySQL-Befehl ändert man die Nummernkreise:

UPDATE eav_entity_store SET increment_last_id = '123456789' WHERE entity_store_id = 1;

Natürlich lässt sich der Nummernkreis aber auch mit der PhpMyAdmin Oberfläche ändern.

Wenn Sie Änderunge machen, bedenken Sie das das increment_prefix Feld vom Typ varchar(20) ist und das das increment_last_id Feld vom Typ varchar(50) ist.

Aktuelle Increment IDs abrufen

Möchte man erstmal wissen wie die aktuellen Increment IDs lauten, ohne die Tabelle suchen zu müssen kann man ein SQL-Statement absetzen:

SELECT core_store_group.name AS group_name, core_website.name AS website_name, core_store.name AS store_name, core_store.store_id, increment_prefix, increment_last_id, entity_type_code
FROM eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
INNER JOIN core_store ON core_store.store_id = eav_entity_store.store_id
INNER JOIN core_store_group ON core_store_group.group_id = core_store.group_id
INNER JOIN core_website ON core_website.website_id = core_store.website_id
WHERE eav_entity_store.store_id != 0 ORDER BY eav_entity_store.store_id;

Increment IDs ändern

Man kann die Increment Last ID getrennt von einem Präfix ändern. In unserem Beispiel ändern wir die Increment Last ID für Bestellungen (‚order‘). Man kann dieses Statement aber auch für Rechnungen (‚invoice‘), Lieferscheine (’shipment‘) oder Kreditkartendaten (‚creditmemo‘) nutzen, dazu einfach den entity_type_code dementsprechend ändern:

UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='123456789'
WHERE eav_entity_type.entity_type_code='order';

Prefix ändern

Den Prefix kann man genauso ändern wie die Increment ID:

UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_prefix='abc'
WHERE eav_entity_type.entity_type_code='order';

Prefix und Increment ID in einem bestimmten Store ändern

Dazu muss lediglich noch der Store benannt werden, im SQL Statement dazu die Store ID angeben:

UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_last_id='123456789'
WHERE eav_entity_type.entity_type_code='order'
AND eav_entity_store.store_id = '1';

Autor

Sebastian

Ich interessiere mich für eCommerce-Themen, vor allem im Zusammenhang mit dem Shopsystem Magento Commerce sowie alles rund um Web-Entwicklung und den damit verbundenen Möglichkeiten.

13 Kommentare zu “Bestellungen und Nummernkreise ändern

  • 2. August 2013 um 17:43 Uhr
    Permalink

    Hallo,
    ich habe die Nummernkreise immer in der PhpMyAdmin-Oberfläche geändert. Nun geht das aber irgendwie nicht mehr, da ich nicht mehr sehen kann, welches die nächste Nummer ist und ich nicht dort dran komme. Irgendwie hat sich die Oberfläche verändert.

    Da ich die Tabelle „eav_entity_store“ ebenfalls nicht finden kann, komme ich auch mit dem Code hier nicht weiter.

    Gibt es einen Tipp, wie man in der Oberfläche noch Nummern kommt, um die Nummernkreise zu ändern?

    LG Judith

    Antwort
    • 4. August 2013 um 20:18 Uhr
      Permalink

      Hallo Judith,

      um die aktuelle Increment ID raus zu bekommen, kannst du folgendes SQL Statement absetzen:

      SELECT core_store_group.name AS group_name, core_website.name AS website_name, core_store.name AS store_name, core_store.store_id, increment_prefix, increment_last_id, entity_type_code
      FROM eav_entity_store
      INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
      INNER JOIN core_store ON core_store.store_id = eav_entity_store.store_id
      INNER JOIN core_store_group ON core_store_group.group_id = core_store.group_id
      INNER JOIN core_website ON core_website.website_id = core_store.website_id
      WHERE eav_entity_store.store_id != 0 ORDER BY eav_entity_store.store_id;

      Beste Grüße
      Sebastian

      Antwort
  • 10. April 2014 um 15:48 Uhr
    Permalink

    Hallo,

    bin jetzt schon die ganze Zeit auf der Suche im Internet, finde jedoch nicht das passende (habe auch bereits in phpmyadmin gesucht, bin jedoch nicht so ein Experte um mich allein dort zurechtzufinden):

    in welcher Tabelle muss ich wo etwas ändern, um den „Artikel ID Zähler“ anders einzustellen (nuten Magento 1.8.10)?

    Zähler müssten wir auf 120.000 stellen, sprich der erste Artikel der neu angelegt wird, bekommt die Artikel ID 120.000, der nächste 120.001 usw…).

    Vielen Dank vorab für eine Antwort, Grüße

    René

    Antwort
    • 10. April 2014 um 21:57 Uhr
      Permalink

      Hallo René,

      dazu musst du in der Tabelle „eav_entity_store“ den Wert „increment_last_id“ auf den gewünschten Wert setzen, z.B. 120000. Magento zählt dann von alleine hoch. Möchtest du noch etwas davor haben, z.B. ein B für Bestellungen, dann in der selben Tabelle den Wert „increment_prefix“ auf B ändern. Soll nichts davor stehen, einfach leer lassen bzw. leeren.

      Beste Grüße
      Sebastian

      Antwort
  • 1. September 2014 um 17:43 Uhr
    Permalink

    Hallo,
    ich möchte gern den Status bei einigen Kunden per mysql verändern.
    Die Sache ist die, vile meiner Kunden brauchten keine Rechnug und haben sie auch nicht angefordert. Nun mache ich meine Steuerklärung, und muss mir die Rechnungen aber ausdrucken. Nun möchte ich aber nicht, dass meine Kunden nach einem Jahr eine Rechnung erhalten, denn ohne diesen Vorgang kann ich in magento keine Rechnung ausdrucken. Sprich, die Rechnung muss erst per email versendet werden und kann dann von mir ausgedruckt werden.
    Ich hoffe sie können mir helfen.
    Mit hoffnungsvollen Grüßen, Tibor Oltyan
    Werkstatt für funktionale Kunst

    Antwort
  • 23. Januar 2015 um 14:25 Uhr
    Permalink

    Bitte gebt mir eine Hilfestellung für Magento 1.9.1, um Kundennummern zu ändern. Alles andere klappt, wie beschrieben.

    Danke Lutz

    Antwort
    • 23. Januar 2015 um 14:28 Uhr
      Permalink

      Egal, was ich der Customer Entity ändere, es zählt brav weiter, ohne Änderung der Nummern.

      Antwort
      • 27. Januar 2015 um 09:34 Uhr
        Permalink

        Hallo Lutz,

        probiere doch mal folgende SQL Query:

        UPDATE eav_entity_store INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id SET eav_entity_store.increment_last_id=’123456789′ WHERE eav_entity_type.entity_type_code=’customer‘;

        Hinweise zum richtigen Umgang gibt es hier: What’s the better way to set an initial customer increment id?

        Beste Grüße
        Sebastian

        Antwort
  • 29. Januar 2015 um 16:41 Uhr
    Permalink

    Bei Betrieb eines Multistores mit mehreren Sprachen legt Magento ja für jeden Storeview eine eigene Rechnungsnummer an. Ich hätte gerne eine einzige. Also egal in welcher Storeview der Kunde bestellt, soll Versandnummer, Bestellnummer, REchnungsnummer etc. hochzählen und nicht 2,3,4 etc. vorneweg setzen

    Weiß du, ob das möglich ist?

    Danke!

    Antwort
  • 4. November 2017 um 18:14 Uhr
    Permalink

    Hallo Sebastian,

    ich habe Probleme mit der Versendung der Sendungsnummern über das Backend. Ich erhalte immer die Meldung „Der Versand konnte nicht gespeichert werden“. Nun habe ich gelesen, dass dies wohl mit den Rechnungsnummern zusammenhängen könnte. Ich habe es versucht, wie du geschrieben hasst, erhalte bei einer Datenbankabfrage aber bei jedem der beschriebenen Befehle nur „#1146 – Table ‚usr_web131_4.eav_entity_store‘ doesn’t exist “
    Hasst du ein Ahnung, wo der Fehler liegen könnte? Danke!

    Antwort
    • 19. November 2017 um 13:30 Uhr
      Permalink

      Hallo Theodor,

      führst du die SQL Abfrage direkt in der Datenbank aus (z.B. mit phpMyAdmin, Adminer, o.ä.)? Ist der Prefix der Datenbank-Tabelle korrekt?

      Ohne weitere Informationen ist es leider schwer den Fehler weiter einzugrenzen.

      Beste Grüße
      Sebastian

      Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*