Modify

Opened 3 years ago

Closed 3 years ago

#2377 closed Aufgabe (fixed)

Unnötiges JOIN in Funktion getAttributesCount()

Reported by: noRiddle Owned by: somebody
Priority: normal Milestone: modified-shop-2.0.8.0
Component: Shop Version: 2.0.7.2
Keywords: Cc:
Blocked By: Blocking:

Description

In der product-Klasse wird in der Query in der Methode getAttributesCount() ein JOIN auf die Tabelle products_options gemacht. Mir erschließt sich der Grund dafür nicht und ich bin der Ansicht, daß man das JOIN entfernen kann und somit, insbesondere bei vielen Attributen, einen Prerformance-Gewinn ereicht.
Eine Abhängigkeit von aktivierten Sprachen ist bei der Zuordnung von Optionen zu Produkten nicht gegeben. Sollten in der Tabelle products_options Spracheeinträge fehlen liegt ohnehin eine Inkonsistenz der Inhalte der betroffenen DB-Tabelle vor.

Gruß,
noRiddle

Attachments (0)

Change History (10)

comment:1 by Torsten Riemer, 3 years ago

Milestone: modified-shop-2.0.8.0

comment:2 by noRiddle, 3 years ago

Was ich hier gemeldet habe ist Unsinn. Weiß leider nicht mehr was ich da gedacht habe oder ob ich etwas verwechselt habe.
Sorry for that.
Ticket kann als "völliger Blödsinn" geschlossen werden.

Gruß,
noRiddle

comment:3 by Torsten Riemer, 3 years ago

Milestone: modified-shop-2.0.8.0
Resolution: invalid
Status: newclosed

comment:4 by noRiddle, 3 years ago

Nachdem ich nun erneut darauf gestossen bin muß ich revidieren und das Ticket sollte wieder aktiviert werden.
Es ist definitiv nicht nur völlig unnötig mit der Tabelle products_options zu JOINen,
sondern auch unsinnig.
Anstatt diesem bisherigen

      $products_attributes_query = xtDBquery("SELECT count(*) AS total_a,
                                                     count(IF(patrib.options_values_price > 0, 1, null)) as total_p 
                                                FROM ".TABLE_PRODUCTS_OPTIONS." popt
                                                JOIN ".TABLE_PRODUCTS_ATTRIBUTES." patrib
                                                     ON patrib.options_id = popt.products_options_id
                                                        AND popt.language_id = '".(int) $_SESSION['languages_id']."'
                                               WHERE patrib.products_id = '".(int)$pID."'");

reicht dies völlig aus:

      $products_attributes_query = xtDBquery("SELECT count(*) AS total_a,
                                                     count(IF(options_values_price > 0, 1, null)) as total_p 
                                                FROM ".TABLE_PRODUCTS_ATTRIBUTES." 
                                               WHERE products_id = '".(int)$pID."'");

Gruß,
noRiddle

comment:5 by Torsten Riemer, 3 years ago

Milestone: modified-shop-2.0.8.0
Resolution: invalid
Status: closedreopened

comment:6 by Gerhard Waldemair, 3 years ago

Wenn wir das so machen wie vorgeschlagen, ist keine Prüfung mehr vorhanden ob es auch Optionen gibt in entsprechender Sprache.

So wie es jetzt ist, ist es aber auch nicht ausreichend.

Die Frage ist ob hier eine Abfrage nach Übersetzungen notwendig ist.

Version 0, edited 3 years ago by Gerhard Waldemair (next)

comment:7 by noRiddle, 3 years ago

Wie könnte es geschehen, daß es Optionen nicht in der entsprechenden Sprache gibt ?
Wenn eine Sprache später angelegt wurde und die Optionen nicht in der neuen Sprache gespeichert sind ?

Wenn man das abfangen wollen würde müsste man nicht nur hier weiter ausholen sondern auch an vielen anderen Stellen im System wo ein solches Problem mit fehlenden Werten in einer oder mehreren Sprachen vorkommen könnte.

Eine Prüfung "ob es auch Optionen gibt in entsprechender Sprache gibt" wird allein an dieser Stelle zu nichts führen. Was sollte es denn für Konsequenzen haben wenn nicht ?
Diese müssten sich ja dann an den (zwei) Stellen wo die Methode bislang angewendet wird auswirken.

Ich denke im Moment, mangels besserer Idden, daß man das erstmal so lassen und sich auf eine konsistente DB verlassen muß.

Gruß,
noRiddle

comment:8 by Gerhard Waldemair, 3 years ago

Ich behaupte mal ganz frech, dass alle anderen Abfragen so gestaltet sind, dass nur das dargestellt wird, was auch in der entsprechenden Sprache gepflegt ist. Manchmal wird das auch ganz bewusst verwendet um Artikel in DE aber nicht ein EN anzuzeigen.

Ein Problem das ich sehe:
Ich lege einen Artikel in den Warenkorb mit Attributen und stelle dann die Sprache um weil ich sehe, dass ich doch auf EN umstellen kann.

Plötzlich hat der Artikel keine Attribute mehr oder noch viel schlimmer, der Artikel verschwindet aus dem Warenkorb.

Last edited 3 years ago by Torsten Riemer (previous) (diff)

comment:9 by noRiddle, 3 years ago

Verstehe vollkommen. Aber das kannst du ja nicht mit der Funktion getAttributesCount() abfangen.

Gruß,
noRiddle

comment:10 by Gerhard Waldemair, 3 years ago

Resolution: fixed
Status: reopenedclosed

In 15176:

fix #2377 - check only products_attributes for attributes due to performance

Modify Ticket

Action
as closed The owner will remain somebody.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.