Vielleicht kann mir hier jemand weiterhelfen. Ich mache ein SQL-Select mit folgenden Parametern SELECT additional_field_id FROM additional_fields WHERE item_type = "product" Das Ergebnis sieht dann so aus (nur die Werte von Additional_field_id) : 30,19,20,26,28,27,21,29,25 Wenn ich nun den Select erweitere um das Feld multilingual, also SELECT additional_field_id, multilingual FROM additional_fields WHERE item_type = "product" Dann sieht das Ergebnis so aus (nur die Werte von Additional_field_id) : 19, 20, 21, 25, 26, 27, 28, 29, 30 Jemand eine Idee oder eine Ahnung warum das so ist?
So lange bei einem SELECT kein ORDER BY angegeben ist, darf das Datenbanksystem (hier: MySQL) frei entscheiden, in welcher Reihenfolge es die Reihen zurückliefert, das ist in der Praxis also völlig von internen Implementierungsdetails des Datenbanksystems abhängig. Es kommt also drauf an, ob/welche Indizes verwendet werden, welche Teile einer Tabelle gerade in irgendeinem Cache liegen etc. pp.
Okay, das ist nicht gut. Den Select habe ich aus der /admin/html/compatibility/product/additional_fields.inc.php. Dort werden die Zusatzfelder "aufgebaut". Leider kommen die nun nicht in der Reihenfolge, in der ich die Felder eingegeben habe, was dann mitunter ziemlich blöd aussieht. Ist das ein Bug oder ein Feature?
Ich verstehe die Frage inhaltlich nicht. Solange du nur eine Spalte abfragst sortiert MySQL halt per Default, nimmste weitere rein nicht mehr. Dann sortier doch halt wieder explizit.
Ich habe mich wohl nicht ganz klar ausgedrückt. Das Problem besteht mit den Zusatzfeldern bei den Artikeln. Wenn ich dort im Artikel z. B. die Felder Herkunft, Geschmack und Jahrgang anlege, dann möchte ich dass diese Felder auch in dieser Reihenfolge im Artikel angezeigt werden. Das ist aber bei mir nicht der Fall. Die Reihenfolge wird bei der Ausgabe in der Produktansicht im Frontend verändert und wenn ich den Artikel im Backend nochmal aufrufe ist die Reihenfolge auch vertauscht und nicht mehr so wie ich die Felder eingegeben habe. Bisher bin ich davon ausgegangen, das die Zusatzfelder immer in der Reihenfolge der Eingabe erscheinen, das ist aber nicht der Fall und ich kann auch keine Logik feststellen wie der Select die Felder zusammenbaut. Ein Overload ist nicht möglich, da dort keine Klasse genutzt wird. Daher kam meine Frage Bug oder Feature. Ich baue da noch nichts neues, ich möchte nur die Gambio-Standardfunktion nutzen, was für mich im Augenblick schlecht ist.
Bei mir (Testshop auf dem PC) werden die Felder immer so angezeigt, wie ich sie ursprünglich mal angelegt habe. Version 3.14.
Ich habe das bei einen anderen Shop auch so gesehen, aber bei mir wird es anders angezeigt. Das passiert bei einen 3.8, 3.14 und auch bei einer 3.15 Version. Ich habe ja gedacht, dass es am SQL-Server liegt und es dafür einen "Trick" gibt, damit die Reihenfolge so bleibt. Merkwürdigerweise kommt die "richige Sortierung" wenn ich das Feld multilingual in die Abfrage mit einbaue, zumindest beim phpMyAdmin.
Ich blick da nicht durch, das ist mir so zu theoretisch. Ich verstehe da kommt aus irgendwelchem Code irgendwo was raus nicht sortiert ist, das vermutlich bei einer selbst erweiterten Abfrage und Tabelle. Aber soviel Kontext, dass ich verstehen würde wo warum kein sortby möglich ist, krieg ich hier so trocken nicht raus.
Okay, jetzt nochmal ganz langsam. Ich habe einen Artikel (z. B. Einen Wein) für den ich im Adminbereich bei der Bearbeitung der Artikeldaten drei Zusatzfelder, in der Reihenfolge: Herkunft, Geschmack und Jahrgang, anlege. Ich nutze hier nur die Standardfunktion die von Gambio vorgesehen ist. Wenn ich diesen Artikel nun speichere und mir dann die Felder erneut in der Bearbeitung anschaue, dann ist die Reihenfolge vertauscht. Wie gesagt, ich habe nur die Felder angelegt und schaue nun nochmal die Felder an. Ich habe hier keine eigene Abfrage oder eigene Tabellen genutzt. Wenn ich nun im Frontend den Artikel aufrufe, dann werden mir hier die Felder genauso vertauscht angezeigt wie im Backend. Auch hier ist nur die Anzeige in der Artikelanzeige gemeint, die von Gambio bereitgestellt wird. Keine weitere Abfrage oder andere Tabelle. Jetzt kommt der theoretische Teil. Ich habe geschaut, wo die Anzeige zusammengebaut wird und habe dann die "/admin/html/compatibility/product/additional_fields.inc.php" als Ort des Aufbaus gefunden. Wenn ich nun den dortigen Select nehme und in phpMyAdmin eingebe, dann kommt die Reihenfolge heraus, welche im Shop auch raus kommt, also die "Falsche". Wenn ich nun zum Select das Feld "multilingual" hinzufüge, dann kommt das Ergebnis in der Reihenfolge der Eingabe. Da der Aufbau nicht über eine Klasse führt, kann ich da auch nicht überladen, wobei ich das auch nicht für sinnvoll halte, das ich eine Funktion von Gambio überlade, nur weil die nicht das mach was man erwartet. Marco hat in #2 sehr schön erklärt, wo das Problem liegt und darum habe ich die Frage Bug oder Feature gestellt. Um auch diese Frage weiter aufzuschlüsseln: Ist es von Gambio gewollt, das man dort mit einen Ergebnis(Reihenfolge) arbeitet, was vom Datenbanksystem bestimmt wird?
Geht es nicht mehr darum? Könntest doch in Zeile 13 einfach eine Sortierung nach additional_field_id anhängen? Oder die additional_field_description über die additional_field_id joinen und dann nach name sortieren? Nicht updatesicher, klar. Vielleicht verstehe ich dein Anliegen auch falsch? Was ist denn der Usecase, willst du Optik im Frontend vereinheitlichen für den Kunden oder im Admin was automatisieren oder warum müssen die Felder eine feste Reihenfolge haben?
Nett gemeint, aber den Original-Code zu verändern, das ist für mich ein absolutes NoGo. Wenn ein Overload möglich gewesen wäre, dann hätte ich das evtl. gmacht aber so nicht, dann lasse ich es wie es ist und arbeite damit. Ich will die Zusatzfelder auch an anderen Stellen ausgeben und da hatte ich mit einer eigenen Funktion gearbeitet. Da ich dachte dass die Felder immer in der Reihenfolge der Eingabe ausgegeben werden, habe ich die Ausgabe dort dann entprechend gestaltet. Das muss ich nun halt anders lösen, dann ist die Anzeige ja wieder überall gleich. Das die Sortierung dann nicht unbedingt so ist wie erstmalig eingegeben, das ist dann halt so.
Gambio v3.15.1.2 /system/classes/products/additionalFieldControl.inc.php SELECT .. FROM .. WHERE .. Zeile 54 "ORDER BY additional_field_id" anhängen. So habe ich eine Sortierung hinbekommen. Eventuell der Vorschlag an das Gambio Team, das prinzipiell so zu gestalten. @Marco (Gambio) Was soll ich mit einer Menge? bzw. gibt es einen Grund dafür? (Also werden an anderer Stelle u.U. Mengen miteinander verglichen oder verknüpft?) Ich denke 99% der User arbeiten mit einer Reihenfolge und hätten die dann je Produkt auch gerne immer in der selben Sortierung. (Wie Kai und ich auch) Habe das Thema jetzt nochmal aufgegriffen, weil ich denke, das Zusatzfelder eine Option zu den Attributen sind, die ja bekanntlich nicht Ex- oder importiert werden können. Mit den Zusatzfeldern geht das aber! Zumindest den Export habe ich schon gemacht und sie stehen in der CSV... Und selbst wenn man evtl. Mengen vergleichen oder verknüpfen will wäre die Sortierung dann ja auch nicht hinderlich! Wenn schon keine Sortiermöglichkeit über ein Extra Eingabefeld, dann aber doch bitte wenigstens nach Eingabe. Wäre eine halbe Zeile code. Eine saubere Lösung mit diesen overloads wäre mir auch lieber, da muss ich mich aber erstmal reinfiddeln. Woher hast Du die Info, dass das mit overloads nicht geht in dem Fall. Habe hier in den Antworten nichts darüber gelesen? Bis dahin packe ich die inc.php in einen exra-ordner auf dem Server und spiel sie nach einem update wieder ein. grummel. Ich wollte die Zusatzfelder auch an anderer Stelle ausgeben lassen. Als "Tab" neben der Beschreibung. Das ist mit dem Theme oder Templatesystem von gambio aber scheinbar nicht so leicht... Muss ich da jetzt eine eigene Function für basteln? Die ist doch da. Und das Ergebnis wird doch auch ausgegeben oben rechts im Preis-block? Aber das ist wohl eine neues Thema...sorry. wünsche allen einen schönen Tag
Hi, man kann die Funktionen "get_field_names_by_item_type" und "get_fields_by_item_id_and_item_type" in der Datei "/system/classes/products/AdditionalFieldControl.inc.php" problemlos überladen und statt der Originalfunktion nutzen. Wenn das als getrenntes Modul dann im GXModules liegt wird das keine Originaldateien überschreiben und bleibt bei Update erhalten.
Grundsätzlich sollte man m.M.n immer explizit sortieren. Man weiß nie was am anderen Ende der Leitung dran hängt - sei es eine betagte MySQL, eine MariaDB oder sonst etwas. Auch weiß man nicht ob wer an den Indizes geschraubt hat um Performance zu verbessern. Durch Angabe von ORDER BY hat man volle Kontrolle mit man es sich wünscht. Man sollte aber bei mehrfach Sortierungen wie z.B. ORDER BY products_id, additional_field_id jeweils bei den Feldern explizit auch die Sortierrichtung (ASC, DESC) mit angeben, damit diese nicht durch die Tabellenstruktur vorgegeben wird. Also besser: ... ORDER BY products_id asc, additional_field_id asc
Hallo Till, klingt super, danke. Werde ich mich demnächst mal dran versuchen an dem überladen. Schön, dass es das überhaupt gibt, die Möglichkeit eigene Funktionen updatesicher zu implementieren. Großes Lob! Danke. Hm, hat er irgendwie nicht abgeschickt meine Antwort?