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';
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
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
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é
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
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
Bitte gebt mir eine Hilfestellung für Magento 1.9.1, um Kundennummern zu ändern. Alles andere klappt, wie beschrieben.
Danke Lutz
Egal, was ich der Customer Entity ändere, es zählt brav weiter, ohne Änderung der Nummern.
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
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!
Hallo Matthias,
das ist eine schwierige Aufgabe. Mit Magento Bordmitteln wird man da nicht weit kommen, und auch mit selbst programmieren ist es nicht so einfach. Es gibt jedoch eine Extension die das kann.
Ein Lösungsansatz wurden hier gepostet:
Having multiple store views share the same order increment_id number range
Magento: Can you set it so all Websites share the same order increment id sequence?
Oder aber du investierst 79$ und holst dir diese empfehlenswerte Extension:
Custom Order Number Pro
Beste Grüße
Sebastian
danke für Dein Feedback. Na ja, für 79 Dollar brauch man wohl nicht selbst programmieren…
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!
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