Jump to content

SQL auf Tabellen category, category_lang ... Key:id_category


davigo

Recommended Posts

Hallo, liebe Spezis.

 

Ich versuche von extern per SQL in die Tabellen ps_category und ps_category_lang zu schreiben (bis Version 1.6).

 

Update funktioniert immer. Beim Insert stört, dass sich die DB irgendwie/wo den jeweils höchste Wert für „id_category“ merkt und von da an selbst weiter zählt. Ich darf beim Insert die „id_category“ nicht eigenständig vergeben und in die DB schreiben (aus meiner XML-Quelle übernehmen).

 

„id_category“ kommt vor in den Tabellen: ps_category, ps_category_group, ps_category_lang, ps_category_product, ps_category_shop, ps_group_reduction, ps_layered_category, ps_product_comment_criterion_category, ps_scene_category, ps_shop

Hier scheint jedoch nirgends die höchste „id_category“ gehalten zu werden.

 

Wahrscheinlich gibt es eine zentrale Tabelle, in der die jeweils letzten Werte gehalten werden. Ja, wo?

 

Wozu ist das alles gut? Über eine externe Sw kann man u.U. sehr viel schneller DBs analysieren, Daten modifizieren, ... mappen ... updaten.

Im konkreten Beispiel habe ich extern über 500 Warengruppen als TreeView erstellt und für PS vorbereitet...

Aber nun scheitert es noch an diesem Key „id_category“.

 

Hat jemand eine Idee, bitte?

 

MfG

Link to comment
Share on other sites

Sehr wahrscheinlich hat das Feld id_category der Tabelle  ps_category in MySQL die Option auto_increment aktiviert d.h. du müsstest es für den Import deaktivieren und danach wieder aktivieren. Einfach mal nach obigem googeln.

  • Like 1
Link to comment
Share on other sites

Danke Pronux - für diesen entscheidenden Hinweis; ich war wohl blind.

 

Allerdings muss man AUTO_INCREMENT nicht aus-/ein-schalten, sondern den Wert -1 vor dem „Insert“ einfach eigenverantwortlich in der Tabelle setzen; etwa so (C#):

cmdS_category_AuIcr = "ALTER TABLE " + sDB_DB_Tabellen_Praefix + "category " + "AUTO_INCREMENT = ";

cmdS_category_AuIcr += Convert.ToInt32( row["id_category"].ToString()) - 1;

 

MySqlCommand commI_category_AuIcr = new MySqlCommand(cmdS_category_AuIcr, myConnection);

 

Weil wir ganz sicher gehen wollen - auch bei sehr großen Datenmengen, öffnen (und) schließen wir die DB-Connection für jeden DS der Quelle. Das funktioniert ganz sicher.
Die jeweils abhängigen Tabellen haben übrigens kein  AUTO_INCREMENT.

 

Jetzt übertragen wir diese Verfahrensweise auf Produkte.

 

MfG, DAVIGO

  • Like 1
Link to comment
Share on other sites

Ich glaubte nur mit der Übertragung von Kategorien fertig zu sein… Version 1.6.0.5.

 

Entschuldigung; die Angabe „-1“ war falsch; somit muss die betreffende Zeile lauten:
cmdS_category_AuIcr += Convert.ToInt32( row["id_category"].ToString()) ;

 

Die Übertragung meiner extern erstellten Tabellen category und category_lang in die DB funktioniert einwandfrei. Jedoch werden im BO nicht alle Kategorien (die in der DB vollständig sind) angezeigt, sondern konkret nur 21 von über 500 ; Bearbeiten funktioniert gar nicht. FO zeigt mir gar keine Kategorien. (Shop1)

Alternativ hole ich mir die Kategorien aus einem frischen Testshop (Shop2), bearbeite lokal nur die Bezeichnungen/Texte, exportiere diese Kategorien in Shop1. –Alles ist dann ok, so wie es sein soll.

 

Ich kommen deshalb zu folgenden Fragen:
Braucht es / gibt es in PS-BO irgendwo ein komplettes „Reindex“?

Sind eventuell weitere Tabellen zwingend beteiligt, also nicht nur category und category_lang?
Alternativ könnte man ähnliche Fkt. im PS-PHP anschauen, vergleichen?

 

Besten Dank vorab.

MfG, davigo

Link to comment
Share on other sites

Ohne diese Sache in PrestaShop 1.6 genau zu studieren, kann ich dir spontan leider keine brauchbaren Antworten geben. Wir hatten vor langer Zeit aber auch schonmal ähnlich Probleme, ich glaube, es hatte etwas mit den Feldern in ps_categories zu tun (hat dort ein paar sehr spezielle welche für die Sortierung/Parent-Child-Relationship verantwortlich sind).

 

Falls du das Problem nicht findest oder dir hier niemand konkrete Hilfe geben kann, würde ich die Kategorien halt via PrestaShop-Import-Tool anlegen.

Link to comment
Share on other sites

CSV-Import werde ich mal versuchen.

Für den Anfang nehmen wir V 1.6 nur mit Test-Daten exportieren (11 ? Kategorien, csv), erhalten dann in der Datei:

 

"ID";"Name";"Beschreibung";"Position";"Anzeigen";

"3";"Women";"<p><strong>You will find here all woman fashion collections.</strong></p><br /><p>This category includes all the basics of your wardrobe and much more:</p><br /><p>shoes, accessories, printed t-shirts, feminine dresses, women's jeans!</p>";"1";"1";

 

Wo sind die anderen Datensätze? Soll das die vollständige Struktur sein, wo sind die „Eltern, die armen Kinder“ …? Beim CSV-Import ist die max. Struktur allerdings so beschrieben:

ID
Aktiv (0/1)
Name *

Elternkategorie

Hauptkategorie (0/1) 

Beschreibung

Meta-Titel

Meta-Schlüsselwörter

Meta-Beschreibung

Benutzerfreundliche URL

Bild-URL

ID / Name des Shops 

 

Was soll man also z.B. davon halten oder sehe ich die verschieden Möglichkeiten vielleicht nicht? –Ich stehe voll auf PS!-  Aber soweit es um Daten-Import-Export geht, lohnt sich die Auseinandersetzung mit den gegebenen BO-Funktionen wohl kaum: unvollständig, verworren, fehlerhaft, oder?

 

Ich werde die Zusammenhänge hoffentlich noch erkennen und zunächst exteren Funktionen weiter bevorzugen (müssen).

Edited by davigo (see edit history)
  • Like 1
Link to comment
Share on other sites

CSV-Import werde ich mal versuchen.

Für den Anfang nehmen wir V 1.6 nur mit Test-Daten exportieren (11 ? Kategorien, csv), erhalten dann in der Datei:

 

"ID";"Name";"Beschreibung";"Position";"Anzeigen";

"3";"Women";"<p><strong>You will find here all woman fashion collections.</strong></p><br /><p>This category includes all the basics of your wardrobe and much more:</p><br /><p>shoes, accessories, printed t-shirts, feminine dresses, women's jeans!</p>";"1";"1";

 

Wo sind die anderen Datensätze? Soll das die vollständige Struktur sein, wo sind die „Eltern, die armen Kinder“ …? Beim CSV-Import ist die max. Struktur allerdings so beschrieben:

 

Also Export habe ich bis anhin immer direkt aus der DB gemacht, weil über die Admin (BackOffice) Funktion hatten wir immer irgendwelche Probleme. Ich weiss auch nicht warum, aber bei solchen Anwendungen sollte von mir aus gesehen doch die CSV-Struktur von Import und Export IMMER übereinstimmen. Gib uns doch mal ein Feedback, wenn du eine Lösung gefunden hast, denke das würde noch viele interessieren.

Edited by Pronux (see edit history)
Link to comment
Share on other sites

Mein Feedback (ich musste einiges ausprobieren): V. 1.6.0.5 Erfahrungen aus Tests zu Category-Import-Export

 

CSV-Import aus BO funktioniert einwandfrei, getestet mit über 900 Kategorien, bei Schachteltiefe 8; Gesamtdauer für Export/Import jetzt ca. 5 Minuten.

CSV dazu automatisch erzeugt mit eigenen Tools aus realem PS V. 1.5.
Meine ermittelten Bedingungen: Die DS „Root“ und „Start“ dürfen nicht in der CSV sein. Nach Anwendung von „PrestaShop Cleaner“ sind die DS „Root“ und „Start“ ja bereits vorhanden (ID 1+2).
Vorhandene Kategorien vor Import löschen? Ja
IDs der Importdatei beibehalten? Ja

 

Meine CSV ist nach „parent“ sortiert und „parent“ muss existieren; ein eventueller Fehler wird nicht korrekt abgefangen!

[PrestaShopException]
Parent category does not exist

at line 379 in file classes/Category.php

373.                                if (!$this->id_parent)

374.                                                     return 0;

375.

376.                                $parent_category = new Category((int)$this->id_parent);

377.                                if (!Validate::isLoadedObject($parent_category))

378.                                                     throw new PrestaShopException('Parent category does not exist');

379.                                return $parent_category->level_depth + 1;

380.            }

381.

382.            /**

383.              * Re-calculate the values of all branches of the nested tree

  • CategoryCore->calcLevelDepth - [line 155 - classes/Category.php]
  • CategoryCore->add - [line 1185 - controllers/admin/AdminImportController.php]
  • AdminImportControllerCore->categoryImport - [line 3253 - controllers/admin/AdminImportController.php]
  • AdminImportControllerCore->postProcess - [line 171 - classes/controller/Controller.php]
  • ControllerCore->run - [line 373 - classes/Dispatcher.php]
  • DispatcherCore->dispatch - [line 54 - admin/index.php]

 

Der direkte SQL-Export/Import über meine Tools funktioniert noch nicht einwandfrei, obwohl category, category_lang voll übereinstimmen und der Category-Tree aus der Ziel-DB mit DAVIGO-Tools korrekt angezeigt wird. Die vorhandenen Einschränkungen werden vermutet bei der Cleaner-Meldung: DELETE FROM `ps_category_group` WHERE `id_category` NOT IN (SELECT `id_category` FROM `ps_category`) 2769 Zeile(n).
Hat jemand eine Idee zur Rolle von „category_group“?

 

Zusammenfassung: Wir haben eine akzeptable Lösung auch für große Datenmengen; der CSV-Import aus BO funktioniert.
Wir windmen uns nun den Produkten.

Edited by davigo (see edit history)
Link to comment
Share on other sites

Danke für dieses ausführliche Feedback!

 

Die category_group ist einfach eine mapping-table die definiert welche Kundengruppe (ps_group) welche Kategorie sehen darf. Ich denke, per default ist einfach jede Kategorie den 3 Default-Kundengruppen zugeordnet.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...