ich stoße an meine SQL Grenzen ;D

Thema wurde von erzi, 23. Juni 2015 erstellt.

  1. erzi
    erzi Mitglied
    Registriert seit:
    22. Juni 2015
    Beiträge:
    5
    Danke erhalten:
    0
    Hallo liebe Gambio Freunde,

    ich habe mein Problem schon kurz hier erklärt:

    http://www.gambio-forum.de/threads/...-Migration-Duplicate-content-Artikelattribute

    Vielleicht kann ein Moderator diesen Thread hier mit reinkopieren und dort löschen, sry für die Umstände.

    Allerdings glaube ich in der Entwicklerecke besser aufgehoben zu sein und erläutere mein Problem mal etwas genauer.

    Also........

    Bei der Migration von Virtuemart ist nun JEDES Produktattribut und JEDER zugehörige Wert ( im folgenden Nenne ich diese nach Ihrer Datenbank ID zum besseren Verständnis) neu in der Datenbank angelegt worden, auch wenn options_id und options_values_id bereits mit dem gleichen Wert vorhanden waren.

    Zur Veranschaulichung im Anhang die ersten Einträge der jeweiligen Tabellen als Bild im Anhang.

    Nun möchte ich sämtliche doppelten Einträge entfernen, da im Admin bei der Bearbeitung der Attribute eine Liste mit ca 15000 Einträgen erscheint :)

    Natürlich müssen alle ca. 2000 bereits vorhandenen Artikel die bereits zugewiesenen Attribute korrekt behalten.

    Hier mein Lösungsansatz:

    Vor dem Start: Checken ob jeder Wert (option_values_name) auch nur genau einer Option ( options_name ) zugordnet ist. Unwahrscheinlich aber möglich, dass z.B.: der Wert "3x5 cm" Unter der Option Größe als auch Variante verwendet wird.

    Säuberung

    For Each distinct product_options_values_name ( in products_options_values )

    > alle vorkommenden product_option_values_id's in der product_attributes für den entsprechenden Wert mit der Ersten/Niedrigsten ersetzen

    For EACH distinct product_options_name ( in products_options )

    > alle vorkommenden product_options_id in der product attributes für den entsprechenden Optionsnamen mit der Ersten/Niedrigsten ersetzen.

    Danach die tabellen products_options und products_options_values auf die gleiche Weise säubern / alles ausser der Ersten/Niedrigsten ID löschen.

    Dann nur noch die products_options_values_to_products_options säubern und schon wäre ich fertig :D

    Ich bedanke ich vorraus bei jedem, der bis hier immer noch mitgelesen hat.

    Vielleicht kennt jemand auch eine einfachere Lösung.
     

    Anhänge:

  2. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Mhh, wenn du die doppelten löschst, wie verhält sich das mit der Zuordnung zu den Artikeln??

    Wenn Artikel A die Atribute 1 und 2 hat und Artikel B hat die Atribute 3 und 4, wobei Atribut 1 = 3 und 2 = 4 ist, was passiert dann???
    Du entfernst ja eigentlich Atriebut 3, weil es ja als Atribut 1 schon da ist aber Atribut 3 ist mit Artikel B verknüpft! Da müsstest du auch das abändern, das Artikel B dann auch Atriebute 1 und 2 hat..... Richtig????
     
  3. erzi
    erzi Mitglied
    Registriert seit:
    22. Juni 2015
    Beiträge:
    5
    Danke erhalten:
    0
    Hallo Steffen,

    ich bin sehr dankbar, dass du dir mit mir Gedanken machst, is echt ne harte Nuss für mich.

    Genauso wie du es beschrieben hast habe ich es gedacht.

    Also möglichst zuerst die den Produkten zugeordnete Datenbank anpassen:

    also jedes vorkommend attribut ( nehmen wir mal die Farbe rot) anhand der product_option_values ( z.b.: die Farbe rot ist dort tausend mal gespeichert mit anderer id, product_option_values_name = rot, id = 1,3,6,65,23452)

    in der products_attributes so ändern dass dort alle products_product_option_values_id 3,6,65,23452 etc. auf 1 gesetzt werden

    Dasselbe entsprechend mit den Product_option_Names aus der tabelle product_options ( Da nun in der products_attributes z.b. sowiese nur noch für "rot" (Wert) id 1 verknüpft ist, muss die entsprechende verknüpfung auf "Farbe" (Optionsname) genausp angepasst werden.

    Danach müsste theoretisch schon eine einfach distinct abfrage auf jeweils product_options und products_options_values eine sauberes ergebnis für diese beide tabellen liefern ( ich nehme hier mal an, dass die distinct abfrage auch den ersten Wert mit der niedrigsten id liefert)

    Die tabelle products_options_values_to_products_options dürfte zumindest dann erstmal egal sein, dort verknüpfte falsche Werte sollten zumindest im Admin nicht mehr auftauchen.

    Ich würde mich jetzt weder als Anfänger, noch als Profi bezeichnen und entschuldige mich schonmal, wenn ich alles etwas kompliziert erkläre ;D

    tausend Dank nochmal für deine Hilfe
     
  4. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Naja, dann zuerst alle gleichen Atribute abfragen. Die kleinste ID rausselektieren, alle anderen in den Produkten abfragen und auf die kleinste ID ändern und dann alle auser die kleinste löschen.
    Kann man mit ner foreach lösen.... Nicht alltäglich aber lösbar!
     
  5. erzi
    erzi Mitglied
    Registriert seit:
    22. Juni 2015
    Beiträge:
    5
    Danke erhalten:
    0
    genau da hast du Recht ;D

    Wenn mir jetzt noch einer einen kleinen Batzen PHP-Code postet den ich anpassen kann wäre glücklich ;D
     
  6. Steffen (indiv-style.de)
    Steffen (indiv-style.de) G-WARD 2013/14/15/16
    Registriert seit:
    30. Juni 2011
    Beiträge:
    5.143
    Danke erhalten:
    1.466
    Danke vergeben:
    452
    Beruf:
    Systemadmin, Webentwickler bei Indiv-Style
    Ort:
    PhpStorm
    Kleiner Batzen??? ich glaube jetzt verkennst du die Angelegenheit! Das wird so nix....