errox Geschrieben 29. Januar 2015 Teilen Geschrieben 29. Januar 2015 Hallo Liebe User, ich habe eine Frage zur Übermittlung von Änderungen. Anwendung: Artikel (Für einen Onlineshop) mit Eigenschaften. Die Tabelle hat folgenden Aufbau: Transfered (Spalte als Info ob Sie abgearbeitet wurde, Default 0, Übertragen: 1), ArticleNumber, OptionGroup (z.B. Farbe), OptionValue (z.B. Schwarz), OrderID. Nehmen wir einen Fallbeispiel: 0, 12345, Farbe, Grau, 1 0, 12345, Hersteller, Musterfirma, 2 0, 33333, Farbe, Blau, 1 ... usw Die Daten werden Gruppiert (Nach Artikelnummer) aus der Tabelle geladen und als Eigenschaften in den Shop eingetragen. Das Klappt soweit ganz gut. So das immer der "soll" Stand eingetragen wird. Das Problem: Das läuft über eine Schnittstelle. Die WaWi befüllt eine Tabelle immer wieder neu. Ich würde das gerne unterlassen. Ich habe mir folgendes überlegt: 1. Die WaWi hat eine Tabelle, die Sie befüllt 2. Die Tabelle wird übertragen in eine andere Tabelle. Struktur ist identisch. Aus der WaWi lade ich alle Artikel. Guck ob sich was in der "Ziel" Tabelle verändert hat. Wenn ja, werden die Daten als Transfered 0 übermittelt. Ansonsten ändert sich nicht. Danach aktualisier ich alles, was Transfered = 0. Danach setze ich es auf 1. Hier bereits ein Grober ausschnitt: Info: Es wird in PHP / MySQL umgesetzt. /** * Kopiert eine Tabelle * @param string $sourceTable Quelltabellenname * @param string $targetTable Zieltabellenname * @param string $groupColumn Spalte nach der Gruppiert wird */ public static function Copy($sourceTable, $targetTable, $groupColumn) { $sql = "SELECT DISTINCT `".$groupColumn."` FROM `".$sourceTable."`"; $query = ElioTransferCore::$CON->MySqlQuery($sql); while($row = mysql_fetch_row($query)) { $sql = "SELECT * FROM `".$sourceTable."` WHERE `".$groupColumn."` = '".$row[0]."'"; $innerQuery = ElioTransferCore::$CON->MySqlQuery($sql); while($rowInner = mysql_fetch_assoc($innerQuery)) { // Logik um nur die Änderungen zu übermitteln } } } Das Problem: Die Tabelle hat 491140 Datensätze. Das für 10232 Artikel. Wenn ich die Tabelle 1:1 Kopiere (Select, Insert) brauch ich 4 - 5 Minuten. Das Script (Siehe Oben) braucht über eine halbe Stunde. Und die Logik für den Abgleich habe ich noch garnicht implementiert. Das Hauptproblem was ich habe, ist das diese 491140 Datensätze, ewig brauchen (ca. 24 - 25 Std.) um Sie abzuarbieten (Da sind noch viel mehr Spalten dabei als nur OptionName / Value, SortID). Den ablauf kann ich auch nicht korrigieren / optimieren. Das wird leider so vorgegeben. Deswegen würde ich die zu abarbeitende Menge optimieren. Gibt es einen anderen / besseren weg? Oder ist das der beste? Vielen dank und liebe Grüße! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
feuerjinn Geschrieben 30. Januar 2015 Teilen Geschrieben 30. Januar 2015 1. Hinweis "Select *" ist in der Programmierung verpönt und kostet Zeit. Spaltennamen bitte hier eintragen. 2. Logik Du machst 2mal einen Full-Table Scan. Einmal holst du dir alle unterschiedlichen Gruppen raus und dann holst du dir alle Datensätze die diese Gruppe beinhalten. Was ist wenn du sowas machst "Select col1,col2,col3,coln from sourcetable group by groupcolumn" und dann ein mysql_fetch_assoc? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
errox Geschrieben 30. Januar 2015 Autor Teilen Geschrieben 30. Januar 2015 Hallo, danke für die Antwort. Wenn ich das mache, dann krieg ich ja nur immer einen Datensatz zu dem Artikel zurück: Bsp: SELECT ArticleNumber, GroupGuidID, AttributeGroup FROM `articleattributes_target` GROUP BY ArticleNumber Dann krieg ich (wie gesagt) zwar alle Artikel, aber nicht die jeweiligen Datensätze zu den Artikelnummern. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.