Zum Inhalt springen

Datenbank Tabelle "Änderungen" Kopieren


Empfohlene Beiträge

Geschrieben

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!

Geschrieben

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?

Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...