Frage an die SQL-Experten, nach einem SQL-Select: SELECT products_id, categories_index FROM `categories_index` erhalte ich als Ergebnis der Spalte categories_index u.a. z.B. eine Zeichenkette wie diese: -0--2--253--1101- Der Bindestrich und die 0, also die "-0" und der 1. Doppelbindestrich und die 2, also die " --2", sind hierbei für mich NICHT weiter von Interesse.... Aus der o.g. Zeichenkette würde ich aber gerne - den reinen Zahlwert nach dem 2. Doppelbindestrich, also den reinen Zahlenwert 253 (also die entsprechende categories_id), extrahieren und - den reinen Zahlenwert nach dem 3. Doppelbindestrich, also den reinen Zahlwert 1101 (also die entsprechende categories_id), extrahieren . Frage: Wie muss die Abfrage bezüglich der Spalte categories_index umgestaltet werden SELECT products_id, categories_index FROM `categories_index` damit statt der langen Zeichenkette -0--2--253--1101- gezielt der reine Zahlenwert, hier 253, nach dem 2. Doppelbindestrich und der reine Zahlwert, hier 1101, nach dem 3. Doppelbindestrich ermittelt/extrahiert wird?
Hi, wenn du kurz erklären könntest was du vorhast, gibt es eventuell einen besseren Weg als das aus der categories_index Tabelle zu lesen. Es gibt nämlich noch die Tabelle "products_to_categories" wo es eine direkte Zuordnung der categories_id zur products_id gibt ohne Bindestriche. Eventuell hilft dir das schon. Die Tabelle categories_index ist auch eine Cache-Tabelle und kann sich auch mal schnell ändern.
Hallo, Till hat recht, die benötigten Informationen können sicher eleganter aus anderen Tabellen entnommen werden. Stringzerlegung in SQL ist immer blöd und man erkauft sich die Lösung in der Regel durch hohen Rechenaufwand und damit lange Laufzeiten der Statements. Für ein einmaliges extrahieren der Daten ist das aber ok. Eine Lösung würde so aussehen: Code: SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(categories_index, '-', 6), '-', -1) as cat_id_1, SUBSTRING_INDEX(SUBSTRING_INDEX(categories_index, '-', 8), '-', -1) as cat_id_2, products_id, categories_index FROM `categories_index`; Es wird dabei jeder Datensatz vier mal zerlegt. Zwei mal für die erste Kategorie und zwei mal für die zweite Kategorie. Der innere SUBSTRING_INDEX extrahiert alles rechts der Bindestriche, der äußere dann den Teil links der Bindestriche. Gruß Alexander
Gerne: In meinem Shop gibt es Indoor Car Cover Artikel in insgesamt 4 Farben (rot, black, grün und blau). Doch täglich rufen mich Kunden an, befinden sich z.B. auf einem (roten) Indoor Car Cover Artikel wie diesem: (Link nur für registrierte Nutzer sichtbar.) und fragen: "Haben Sie das Cover zu diesem Fahrzeugmodell auch in anderen Farben...?". Ich möchte daher die 4 Farbbeispiele in der o.g. Indoor Car Cover Artikelbeschreibung mit einem http:-Link auf die dazugehörige DARÜBERLIEGENDE (Fahrzeugmodell)-KATEGORIE versehen, damit die Kunden die verschiedenen Farben zu einem Fahrzeugmodell viel leichter selbst finden können.... Das o.g. Artikel-Beispiel bzw. die o.g. URL gliedert sich letztlich in folgende URL-Abschnitte, hier mit verschiedenen Farben markiert. Die URL des Artikels ist himmelblau markiert: (Link nur für registrierte Nutzer sichtbar.)car-cover/AC-COBRA/COBRA-427/Car-Cover-AC-Cobra-427-Baujahr-1962-1968-3945.html Der Artikel befindet selbst sich in der Kategorie bzw. Unterkategorie car-cover -> AC-COBRA -> COBRA-427 Ich möchte also mittels der Tabelle `categories_index` in der Artikelbeschreibung meiner Indoor Car Cover Artikel (wo in der Mitte der Artikelbeschreibung die vier Stofffarben abgebildet sind) jeweils einen entsprechenden HTML-Link auf die jeweilige DARÜBERLIEGENDE (Fahrzeugmodell)-KATEGORIE setzen. Dazu muss ich / kann ich m.E. mittels Tabelle categories_index (und der dazugehörigen Tabelle categories_description, mit der Spalte gm_url_keywords) den HTML-Link auf die DARÜBERLIEGENDE (Fahrzeugmodell)-KATEGORIE per SQL (CONCAT) ermitteln / erzeugen. Mittels einer eigens angelegten SQL-Zwischentabelle (kk_categories_index, mit eigenen Spalten cat_name_1 und cat_name_2 für die URL-Werte aus der Spalte gm_url_keywords der Tabelle categories_description) und vielen SQL-Zwischenschritten (um die o.g. Doppelbindestriche zu entfernen) bin ich mitterweile bei folgendem SQL-Statement angelangt: Select CONCAT('(Link nur für registrierte Nutzer sichtbar.)' , cat_name_1, '/', cat_name_2, '/') from kk_categories_index was folgendes Ergebnis bringt. (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) (Link nur für registrierte Nutzer sichtbar.) : : Nun werde ich noch den o.g. Select CONCAT-Befehl in einen Update-Befehl umwandeln und dann damit alle meine Indoor Car Cover Artikel mit einem HTML-Link auf die dazugehörige DARÜBERLIEGENDE (Fahrzeugmodell)-KATEGORIE versehen....dann werden es meine Kunde leichter haben....
Ja, es geht um ein einmaliges Extrahieren und um ein einmaliges Updaten (bzw. wenn Aktualisierungbedarf besteht) um die Indoor Car Cover Artikel mit einem Link auf die DARÜBERLIEGENDE (Fahrzeugmodell)-KATEGORIE zu versorgen. Dein SQL-Befehl sieht sehr smart aus, den werde ich gerne mal ausprobieren....
Hallo, Für Verlinkungen von einem Artikel auf ähnliche Artikel würde ich das Cross Selling einsetzen. Damit kann man zu jedem Artikel passende weitere Artikel einstellen. Vorteil: mit Bordmitteln zu lösen und vermutlich einfacher zu pflegen. Eventuell könnte das auch mit Eigenschaften gelöst werden. Da hoffe ich aber auf die anderen im Forum, ich stehe damit nämlich auf Kriegsfuß. Gruß Alexander
Ich verstehe das Problem immer noch nicht ganz. Links zu den übergeordneten Kategorien sind auf der Artikelseite doch bereits im Breadcrumb oben auf der Seite enthalten …?! Wenn ich da auf „AC Cobra 427 (1962-1968)“ klicke, habe ich doch alle verfügbaren Farben direkt vor mir.
Hallo, über das Cross Selling kannst du doch die anderen Farben direkt mit dem Artikel verlinken anstatt in der Artikelbeschreibung einen Link einzufügen. Die Cross Selling Artikel erscheinen dann schön mit Bild unterhalb der Artikelbeschreibung. Ich finde, das springt den Kunden schneller ins Auge als ein Link auf die übergeordnete Kategorie. Man sieht direkt die anderen Farben oder Materialien zum gewählten Modell. Natürlich ist es einiges an Arbeit, die ganzen Artikel mit ihren Geschwistern zu verlinken. Alle Artikelbeschreibungen zu überarbeiten und einen generierten Link einzufügen ist aber meiner Meinung nach auch nicht wirklich weniger Aufwand. Gruß Alexander
So nun komme ich zum Endspurt meiner SQL-Befehle... Ich habe in meiner Arbeitstabelle kk_categories_index eine Spalte mit der jeweiligen products_id und in der Spalte cat_name_zusammen den benötigten zusammengesetzten URL-/Kategorie-Namen, z.B. "car-cover/AC-COBRA/COBRA-427/" Da der vordere Teil der Link-Url immer der gleiche ist "(Link nur für registrierte Nutzer sichtbar.)" ist wurde er in der Arbeitstabelle in die Spalte cat_name_zusammen nicht mit aufgenommen. Der vordere Teil der Link-Url ist bereits als fester Platzhalter in der Artikelbeschreibung hinterlegt. D.h. in der Artikelbeschreibung ist an einer Stelle (hinter den vier Stofffarben-Bildern) bereits folgendes vordefiniert: (Link nur für registrierte Nutzer sichtbar.)#L# Daran schließt sich (m)ein variabler (SQL-Update) Platzhalter in der Form "#L#" an, der dann durch den Inhalt der u.g. Spalte cat_name_zusammen, z.B. "car-cover/AC-COBRA/COBRA-427/" ersetzt werden soll. Wenn der SQL-Update richtig ausgeführt wurde wird anschließend in der Artikelbeschreibung, hinter den vier Stofffarben-Bildern, ein vollständiger und richtiger Link auf die DARÜBERLIEGENDE (Fahrzeugmodell-)KATEGORIE vorhanden sein: z.b. (Link nur für registrierte Nutzer sichtbar.) Das Lesen meiner Arbeitstabelle select products_id, cat_name_zusammen from kk_categories_index bringt nachfolgendes Ergebnis. P.S. Zu jedem Fahrzeugmodell gehören insgesamt 6 Car Cover Produkte, daher sind es jeweils 6 Sätze pro Kategorienamen... products_id cat_name_zusammen 9000 car-cover/AC-COBRA/COBRA-427/ 8000 car-cover/AC-COBRA/COBRA-427/ 7000 car-cover/AC-COBRA/COBRA-427/ 3945 car-cover/AC-COBRA/COBRA-427/ 3955 car-cover/AC-COBRA/COBRA-427/ 4201 car-cover/AC-COBRA/COBRA-427/ 7001 car-cover/AC-COBRA/COBRA-428-COUPE-CABRIO/ 8001 car-cover/AC-COBRA/COBRA-428-COUPE-CABRIO/ 9001 car-cover/AC-COBRA/COBRA-428-COUPE-CABRIO/ 3946 car-cover/AC-COBRA/COBRA-428-COUPE-CABRIO/ 3011 car-cover/AC-COBRA/COBRA-428-COUPE-CABRIO/ 4202 car-cover/AC-COBRA/COBRA-428-COUPE-CABRIO/ 2660 car-cover/ALFA-ROMEO/156-LIMOUSINE/ 7002 car-cover/ALFA-ROMEO/156-LIMOUSINE/ 4210 car-cover/ALFA-ROMEO/156-LIMOUSINE/ 8002 car-cover/ALFA-ROMEO/156-LIMOUSINE/ 2058 car-cover/ALFA-ROMEO/156-LIMOUSINE/ 9002 car-cover/ALFA-ROMEO/156-LIMOUSINE/ : : Nun zu meiner SQL-Frage: Updaten will ich die Tabelle products_descriptions, genauer gesagt die Spalte products_descriptions bzw. noch genauer gesagt, NUR DEN/MEINEN PLATZHALTER "#L#" INNERHALB der Spalte products_descriptions und zwar mit dem Wert aus der Spalte cat_name_zusammen aus meiner Arbeitstabelle kk_categories_index. Leider fehlen mir dazu das genaue SQL-Update Know how, um den dazugehörigen SQL-Befehl zu schreiben. Nachfolgend daher nur wie der Befehl evtl. aussieht.... Mit Magenta habe ich versucht meine SQL-Frage / mein SQL-Problem zu präzisieren. update products_descriptions inner join kk_categories_index on kk_categories_index.products_id = products_descriptions.products_id set products_descriptions.products_descriptions (nur gezieltes ersetzen von #L# innerhalb der Spalte) = kk_categories_index.cat_name_zusammen Wer kann mir sagen, wie der SQL-Befehl richtig aussehen muss?
Ich weiß, dass oben die Links in (ziemlich) klein da sind....leider wissen dies meine Kunden nicht....bzw. sie sehen sie nicht....warum auch immer....z.B. auf dem Smartphone... 30% Prozent meiner Kundenanrufe täglich haben daher den folgenden Inhalt a) "....ich sehe gerade zu meinem Fahrzeugmodell xy, dass Sie in Ihrem Shop ein Indoor Car Cover in der Farbe xy haben....haben Sie das auch noch in einer anderen Farbe...?" b) "....ich habe gerade auf die vier Stofffarben-Bilder geklickt, bekomme aber nichts weiteres angezeigt...." Ein Großteil meiner Kundschaft ist mit ca. 40-70 Jahren vielleicht auch schon etwas älter und sieht daher die Breadcrumb-Links wohl nicht.... auf jeden Fall möchte ich meinen Kunden den Einkauf erleichtern und daher in der Artikelbeschreibung die vier Stofffarben-Bilder mit einem Link auf die DARÜBERLIEGENDE (Fahrzeugmodell-)KATEGORIE versehen....daher der Aufwand.... Und mehr Einkäufe bedeuten mehr Gewinn.... _____________________________________________________________________________ Eine Anregung / ein Wunsch an Gambio wäre in einer der zukünftigen Shop-Versionen den Breadcrumb in einer größeren Schriftgröße, in Fettschrift und in der jeweiligen definierten Shop-Linkfarbe zu gestalten!
Hi, es gibt in MySQL die Funktion replace, daher sollte der SQL Befehl wie folgt funktionieren: Code: update products_descriptions inner join kk_categories_index on kk_categories_index.products_id = products_descriptions.products_id set products_descriptions.products_description = REPLACE(products_descriptions.products_description,'#L#', kk_categories_index.cat_name_zusammen); PS: URLs, als Link können auch einfach ohne Domain gesetzt werden, die Domain muss nur dann gesetzt werden, wenn es sich um eine externen LInk handelt. Innerhalb der Webseite ist ein Link z.B. mit /info/impressum.html automaisch mit der Domain, das wird dann vom Browser ergänzt. Wenn du später die Domain änderst, musst du das Template nicht passen oder die Artikelbeschreibung nicht ändern. Aus (Link nur für registrierte Nutzer sichtbar.)
Super, der Befehl mit der Funktion Replace hat's gebracht! Es funktioniert nun! Hinter den vier Stofffarben-Bilder ist nun ein Link auf die DARÜBERLIEGENDE (Fahrzeugmodell-)KATEGORIE vorhanden! P.S. Hatte noch einen kleinen Fehler im Tabellenname...statt "products_descriptions" muss dieser richtigerweise "products_description" (ohne "s" am Ende) heißen...so ist nun der ganze SQL-Befehl korrekt: Code: update products_description inner join kk_categories_index on kk_categories_index.products_id = products_description.products_id set products_description.products_description = REPLACE(products_description.products_description,'#L#', kk_categories_index.cat_name_zusammen)
Frage: Kann ich mir evtl. die umständliche Befüllung meiner o.g. Arbeitstabelle kk_categories_index sparen? Ist evtl. in irgendeiner Tabelle der Aufbau der o.g. Breadcrumb-Links gespeichert, die ich entsprechend für meine Zwecke verwenden könnte?
Hi, du kannst durch ein Overload der ProductInfoContentView als Smarty Variable dein Link an das HTML übergeben. In PHP gibt es eine Funktion um den Kategorielink zu einer Product-ID zu ermitteln. Dann braucht man den ganzen Quatsch nicht in der Artikelbeschreibung speichern und braucht bei Änderungen nur den Overload anpassen. PHP: $seoBoost = MainFactory::create_object('GMSEOBoost', [], true);$seoBoost->get_boosted_product_url($p_pID);