fehlende "s_articles_attribute" Datensätze manuell eintragen

Hallo Zusammen,

Ich habe hier einen Shopware Shop welcher zu Zeiten von SW4 unprofessionell von Magento zu Shopware “migriert” wurde.
Nun gibt es seit knapp einem Jahr immer wieder Scherereien weil Datensätze in der DB kaputt sind.

Ausgangslage: ca. 35’000 Artikeldetails und zu 3302 Artikeldetails fehlen die entsprechenden Attribut Datensätze bei “s_articles_attribute”.
Wollte diese von Hand mit einem Import anlegen (damit sie zwar leer, aber immerhin vorhanden sind) und verknüpfen, allerdings funktioniert dies nicht.

 

3302 fehlende Einträge finden und mir ID und ArtikelID angeben

SELECT d.id, d.articleID FROM s_articles_details as d LEFT JOIN `s_articles_attributes` as a ON a.articledetailsID = d.id WHERE a.id IS NULL

 

im Anschluss wurde mit Openoffice Calc die SQL Befehle zusammenkopiert (hier ein Beispiel):

INSERT INTO `s_articles_attributes`(`id`, `articleID`, `articledetailsID`, `attr1`, `attr2`, `attr3`, `attr4`, `attr5`, `attr6`, `attr7`, `attr8`, `attr9`, `attr10`, `attr11`, `attr12`, `attr13`, `attr14`, `attr15`, `attr16`, `attr17`, `attr18`, `attr19`, `attr20`, `viison_incoming_stock`, `viison_physical_stock`, `viison_not_relevant_for_stock_manager`, `viison_physical_stock_for_sale`, `viison_not_relevant_for_picking`, `viison_required_information_upon_picking`)	VALUES (	NULL,	1687	,	15177	,0,	NULL,	0,	NULL,	NULL,	NULL,	NULL,	0,	NULL,	NULL,	NULL,	NULL,	0,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	NULL,	0,	0,	0,	0,	0,	NULL);

 

Frage: Wie kann ich mehrere fehlende Artikelattribute in der Datenbank ergänzen, wenn nicht auf diesem Weg?

Beste Grüsse

Arya_Svitkona

Du kannst die Einträge in der s_articles_attributes per SQL anlegen lassen:

INSERT INTO `s_articles_attributes` (`articleID`, `articledetailsID`)
SELECT d.articleID, d.id
FROM `s_articles_details` d
LEFT JOIN `s_articles_attributes` at
ON at.articledetailsID = d.id
WHERE at.id IS NULL;
 
UPDATE `s_articles_attributes` at, `s_articles_details` ad
SET at.articleID = ad.articleID
WHERE ad.id = at.articledetailsID

 

1 „Gefällt mir“

Hallo Moritz,

Danke für deine Antwort.

Erhalte die gleiche Fehlermeldung wie bei meinem Vorgehen:
#1452 - Cannot add or update a child row: a foreign key constraint fails (schuh.s_articles_attributes, CONSTRAINT s_articles_attributes_ibfk_1 FOREIGN KEY (articleID) REFERENCES s_articles (id) ON DELETE CASCADE ON UPDATE NO ACTION) .

Du musst wahrscheinlich vorher die Foreign-Key Checks deaktivieren.

SET FOREIGN_KEY_CHECKS = 0;

 

1 „Gefällt mir“

Danke Moritz für deine Hilfe.
Wusste nicht, dass man diesen deaktivieren kann.

Beste Grüsse aus der Schweiz

Hallo, ich stelle mich vermutlich nur zu blöd an aber phpmyadmin lässt mich die Befehle nicht ausführen!

Blockzitat
5 errors were found during analysis.

  1. Unrecognized keyword. (near „at“ at position 160)
  2. Unexpected token. (near „=“ at position 187)
  3. Unexpected token. (near „d“ at position 189)
  4. Unexpected token. (near „.“ at position 190)
  5. Unexpected token. (near „id“ at position 191)

SQL query: Copy

INSERT INTO s_articles_attributes (articleID, articledetailsID) SELECT d.articleID, d.id FROM s_articles_details d LEFT JOIN s_articles_attributes at ON at.articledetailsID = d.id WHERE at.id IS NULL;

MySQL said:

#1054 - Unknown column 'articleID' in 'field list'

Was mache ich falsch?

Ich arbeite nicht phpmyadmin, aber „at“ scheint ein reserviertes Keyword zu sein, dass du nicht als Alias für eine Tabelle verwenden kannst. Ich habe „at“ durch „aa“ ausgetauscht.

INSERT INTO s_articles_attributes (articleID, articledetailsID) 
SELECT d.articleID, d.id 
FROM s_articles_details d 
LEFT JOIN s_articles_attributes aa ON aa.articledetailsID = d.id 
WHERE aa.id IS NULL
;

Danke für deine Antwort!
Leider haben die Aliase nur die Fehlermeldungen beseitigt.
Aber wird trotzdem nicht ausgeführt → #1054 - Unknown column 'articleID' in 'field list'

Eigenartiger weise hatte ich den Codesnipsel aus #3 schon mal so benutzt.

Das folgende SQL listest dir die Spalten der Zieltabelle an, da scheint die Spalte zu fehlen:

SHOW COLUMNS FROM s_articles_attributes

Mein Ergebnis:

Field	Type	Null	Key	Default	Extra
id	int(11)	NO	PRI	(null)	auto_increment
articleID	int(11) unsigned	YES	MUL	(null)	
articledetailsID	int(11) unsigned	YES	UNI	(null)	
attr1	varchar(500)	YES		(null)	
attr2	varchar(500)	YES		(null)	
attr3	varchar(500)	YES		(null)	
attr4	varchar(500)	YES		(null)	
attr5	varchar(500)	YES		(null)	
attr6	varchar(500)	YES		(null)	
attr7	varchar(500)	YES		(null)	
attr8	varchar(500)	YES		(null)	
attr9	mediumtext	YES		(null)	
attr10	mediumtext	YES		(null)	
attr11	varchar(500)	YES		(null)	
attr12	varchar(500)	YES		(null)	
attr13	varchar(500)	YES		(null)	
attr14	varchar(500)	YES		(null)	
attr15	varchar(500)	YES		(null)	
attr16	varchar(500)	YES		(null)	
attr17	date	YES		(null)	
attr18	mediumtext	YES		(null)	
attr19	varchar(500)	YES		(null)	
attr20	varchar(500)	YES		(null)	

Mm, ich fange gerade erst mit Shopware an und habe mir die Version 5.7 installiert, da gibt es die Spalte articleID wirklich nicht.
Ich habe Sie angelegt und hatte Erfolg! Danke!

Das Feld wurde in deiner Version in einem Migrations-Script gelöscht. Das nachträgliche Anlegen macht dann keinen Sinn. Ich würde das Feld wieder entfernen.
Siehe: