Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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!

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?

  • Autor

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 Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.