Zum Inhalt springen

Datenbank Tabelle "Änderungen" Kopieren


errox

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...