Hallo, bevor ich einen SQL Update Befehl ausführe simuliere ich zuerst die Abfrage. Bei der "Abfrage simulieren" zum Beispiel: UPDATE products_description SET products_description = REPLACE(products_description,'Anhänger','Goldanhänger') WHERE products_description NOT LIKE '%Goldanhänger%'; läuft die Abfrage sauber durch. Bei dieser Abfrage: UPDATE products_description SET products_description = REPLACE(products_description,'Anhänger','Goldanhänger') WHERE products_description NOT LIKE '%Goldanhänger%'; wird der Fehler geworfen: "#1064 - Fehler in der SQL-Syntax." SQL/UPDATE mag kein ä Gibt es eine Möglichkeit, dass die simulierte Update Abfrage sauber durchläuft? Gruß Bernd
Man könnte zunächst ein Select-Statement ausführen: Code: SELECT products_description, REPLACE(products_description,'Anhänger','Goldanhänger') AS updated_description FROM products_description WHERE products_description NOT LIKE '%Goldanhänger%'; Wobei ich die WHERE-Bedingung ergänzen würde, um nur relevante Zeilen angezeigt zu bekommen: Code: SELECT products_description, REPLACE(products_description,'Anhänger','Goldanhänger') AS updated_description FROM products_description WHERE products_description NOT LIKE '%Goldanhänger%' AND products_description LIKE '%Anhänger%'; Achja: Vorsicht mit Groß-/Kleinschreibung bzw. dass es damit eben nicht berücksichtigt wird. Also nach dem Update könnte es unerwünschte SilberGoldhänger geben…
@Dominik Späte - erst einmal vielen Dank für die Antwort. Die Gefahr mit fehlerhafte Korrekturen kenne ich zur Genüge, habe das aber mittlerweile im Griff. Abfragen wie Du geschrieben hast: products_description LIKE '%Anhänger%'; mache ich auch . darüber hinaus baue ich noch ne Menge andere "Sicherheitsabfragen ein", um Korrekturen an anderen, unerwünschten Stellen auszuschließen, bzw sonstige unerwünschten Nebenwirkungen zu vermeiden. Das Beispiel bei meiner Frage sollte nur als abgespecktes Beispiel dienen. Ich mache auch immer eine Select-Abfrage vor dem Update - ganz klar. Code: SELECT products_description FROM products_description WHERE products_description LIKE '%Anhänger%' AND products_description NOT LIKE '%Goldanhänger%' ...; Aber, auch da hatte ich schon einige Überraschungen erlebt. Das Ergebnis der SELECT Abfrage war vorher ein anderes als dann nachher beim Update geändert wurde, daher meine Eingangsfrage. Dein SELECT Statement ist anders als meines, ich probiere Deinen Vorschlag gerne aus. Danke und Gruß Bernd
Code: Jetzt weiß ich wieder warum ich import-export und suchen/ersetzen von LibreOffice so mag Richtig - mach ich auch in bestimmten Fällen. Ist aber doch etwas komplizierter bei mir, und ich denke damit wird es nicht reichen. Mein Beispiel: Code: UPDATE `products_description` SET `products_description` = REGEXP_REPLACE(`products_description`, '(?<=<\/h2>)(.*?)( Creole )(.*?)(?=<h3)', '\\1 <span style="color:#525252;"><strong>Creole</strong></span> \\3') WHERE products_name LIKE 'Creole%' AND products_name LIKE '%Silber%' AND products_name NOT LIKE '%Gold%' AND products_description LIKE '% Creole %' AND products_description NOT LIKE '%Gold%' AND products_description NOT LIKE '%<span style="color:#525252;"><strong>Creole</strong></span>%'; ist noch nicht fertig. Hier kommt noch eine INNER JOIN Schnittmenge dazu, um beispielsweise nur bestimmte Kategorien anzusprechen. Des weiteren nehme ich noch ne Menge weitere Verknüpfungen. Zum Beispiel sollen Wörter nur in den Produktbeschreibungen geändert werden, in denen andere Wörter vorkommen oder auch nicht, usw., bin aber noch am entwickeln. Immerhin handelt es sich bei mir um ca. 3000 Artikel, die unterschiedlich behandelt werden müssen. Ich muss letztlich alle Eventualitäten abfangen, damit kein Mist rauskommt.
Auch hier würde ich empfehlen Ist auch nicht sooo schwer, wenn man sich mal ein wenig damit beschäftigt und RegEx's sind ein mächtiges Werkzeug. Schau Dich mal auf https://regexr.com/ oder https://regex101.com/ um und spiel damit ein wenig.
Danke @Pepe schaue ich mir an. Hatte mir das gestern schon mal anggesehen, kann aber zur Zeit nichts damit anfangen, weiß noch nicht mal, wo ich was wie eingeben muss. Ich suche mal nach einem Tutorial. Ich bin aber immer noch am überlegen - und hader auch noch ein bißchen mit mir. Am liebstan würde ich das über ein PHP-Script machen. Mir ein Textfile anlegen, mit entsprechenden Zeilen, in der nur Wörter in der Beschreibung geändert werden, wenn bestimmte Bedingungen erfüllt sind. Zum Beispiel, wenn noch bestimmte andere Wörter in den Artikelnamen oder in der Beschreibung vorkommen, oder auch nicht, unter Berücksichtigung der Kategorien usw. usw. Aber, das koste Zeit, muss dann noch einiges lernen, die ich erstmal nicht investieren möchte. Gruß Bernd
Etwas anderes Thema, aber fiel mir in der SQL-Query auf: Bist Du Dir sicher, dass Du da Inline Styles reinzementieren willst? Warum keine class oder id verwenden? HTML: <span class="highlight_creole">Creole</span> Code: .highlight_creole { color: #525252; font-weight: bold; } (Ja, ich weiß: strong und bold haben verschieden Funktionen. Ich unterstelle mal, es soll nur fett aussehen.)
@Pepe - danke. Ja, könnte ich auch machen. Hatte aber schon ca. 100 Artikel seinerzeit inline geändert. Hm, genau, werde die Inline-Styles via SQL von den 100 Produkten wohl wieder rückändern. Hatte damals das über strong/color inline bei den 100 Artikeln manuell gemacht, testweise, um zu sehen, was das SEO-mäßig bringt. Ja, ich überlege mal, ob ich es über SQL dann rückändere und dann den Style in meine Datei lege.
Ich rate immer dazu Designs nicht inline zu machen, erst recht nicht wenn es bei mehr als 1 Artikel genutzt wird. Ist zwar gegen Null aber jeder Buchstabe Ladezeit wirkt sich irgendwann aus. Aus SEO Sicht sollte es minimal was bewirken aber nicht viel messbares vermute ich mal. Für Kunden hilft es aber oft Highlights zu erkennen.