Suchen und löschen von unterschiedlichen Codes

michaelxxx

Aktiver Benutzer
Beiträge
25
Hallo,

ich hätte ien Frage zu einem SQL Befehl.

Ich nutze Wordpress und habe in mehreren Beiträgen einen externen Code für ein Widget. Der Code dieses Widgets ist aber auch jeder Seite etwas anders.

Jetzt hab ich mir überlegt, welchen Aufwand das ist, wenn ich das Widget aus irgendeinem Grund löschen will. Da müsste ich ja in jeden Beitrag reingehen und das manuell rauslöschen. Daher die Überlegung, ob das auch mit einem SQL Befehl in der Datenbank geht? Aber ich kann da ja nicht einfach ein Suchen und Ersetzen Befehl in der SQL Datenbank nutzen, da wie gesagt der Widgetcode immer etwas anders ist.

Daher die Idee: kann ich das Widgets vielleicht in eine eindeutigen Identifier am Anfang - z.B. ein Shortcode wie [widget-anfang] und Ende [widget-ende] - "umrahmen" und dann per SQL sagen:

- lösche alles von [widget-anfang] bis [widget-ende] in allen Beiträgen?

Gibt es so einen SQL Befehlt?

Blöd zu beschreiben, aber ich hoffe ihr wisst was ich meine? :) Vieleicht denke ich auch zu kompliziert und es gibt eine ganz andere Lösung.

Viele Grüße
Michael
 
Werbung:
Hi,

Danke für Deine Antwort. So wirklich hilft die mir aber leider nicht wieter.

Vielleicht kann mir das mal jemand an Hand dem folgendem praktischen Beispil erklären, wie ein SQl Befehl dann aussehen müsste.

Also ich habe z.B. 3 Beiträge. Alle Beiträge haben einen anderen Code eingebunden, der aber immer gleich beginnt und endet, also z.B.

Beitrag 1:

[Beginn-Widget]
DIV CODE abc
[Ende-Widget]

Beitrag 2:
[Beginn-Widget]
DIV CODE bca
[Ende-Widget]

Beitrag 3:
[Beginn-Widget]
DIV CODE cab
[Ende-Widget]

Wie ihr seht, ist der Anfang mit [Beginn-Widget] immer gleich und auch das Ende mit [Ende-Widget]. Damit würde ich den Code quasi immer "einrahmen". Nur der mittlere Teil unterscheidet sich in jedem Beitrag.

Gibt es jetzt einen SQL Befehlt der sagt, suche in der Datenbank nach allem was mit [Beginn-Widget] anfängt und mit [Ende-Widget] aufhört und lösche es komplet - inkl. dem was dazwischen steht?

Danke für Eure Hilfe.

Viele Grüße
Michael
 
Code:
bdr3=# create table michaelxxx(id bigserial primary key, beitrag text);
CREATE TABLE
bdr3=# insert into michaelxxx (beitrag) values ('erster beitrag [Beginn-Widget] bla fasel abc[End-Widget] und noch mehr');
INSERT 0 1
bdr3=# insert into michaelxxx (beitrag) values ('zweiter beitrag [Beginn-Widget] bla fasel bca[End-Widget] und noch mehr müll');
INSERT 0 1
BEGIN
bdr3=# update michaelxxx set beitrag = regexp_replace(beitrag, '\[Beginn-Widget\].*\[End-Widget\]','') ;
UPDATE 2
bdr3=# select * from michaelxxx;
 id |               beitrag               
----+-------------------------------------
  1 | erster beitrag  und noch mehr
  2 | zweiter beitrag  und noch mehr müll
(2 rows)

bdr3=#
 
Ok, PostgreSQL sagt mir leider gar nichts :)

Irgendwie dachte ich, ich kann Dein Beispiel in einen SQL Befehl umwandel:
Update `omp_posts` set `post_content` = REPLACE(`post_content`, '\[GYG-ANFANG\].*\[GYG-ENDE\]','');

Aber so scheint es nicht ganz richtig zu sein, denn bei einer simulierten Anfrage in der SQL Datenbank bekomme ich dann 0 Treffer.

Die gleiche Abfrage mit Regexp geht gar nicht "#1139 - regexp lieferte Fehler 'range out of order in character class at offset 5'":
update `omp_posts` set `post_content` = regexp_replace(`post_content`, '\[GYG-ANFANG\].*\[GYG-ENDE\]','');

Was mache ich falsch?
 
Du kannst bei MSSQL mit replace() arbeiten, allerdings arbeitet replace() nicht mit Wildcards. Wenn du jetzt genau ein Widget-Code bearbeiten möchtest ist das auch nicht nötig. Du suchst nach dem exakten Code (inkl. exakten Leerschritten, Tabs, etc.!) und tauscht ihn 1:1 mit einem anderen Code, das ist einfach.

Wenn du jetzt unbedingt mit variablen Code-Fragmenten arbeiten musst dann wirds sehr aufwendig und vor allem fehleranfällig. Du musst dann den Anfang vom Code finden, das Ende, alles auseinander dröseln und neu zusammen setzen. Das macht aber auch nur Sinn, wenn du Unterschiede elemenieren willst.
 
Du kannst bei MSSQL mit replace() arbeiten
Ich weiß gar nicht, ob Wordpress bzw. XAMPP überhaupt MSSQL hat?

Wenn du jetzt genau ein Widget-Code bearbeiten möchtest ist das auch nicht nötig. Du suchst nach dem exakten Code (inkl. exakten Leerschritten, Tabs, etc.!) und tauscht ihn 1:1 mit einem anderen Code, das ist einfach.

Klar, 1:1 Search und Replace wäre einfach. Aber wie oben im ersten Beitrag geschrieben geht das nicht, da ich hunderte Beiträge habe und der Code in jedem Beitrag immer etwas anders aussieht.

Du musst dann den Anfang vom Code finden, das Ende, alles auseinander dröseln und neu zusammen setzen.

Der Anfang von allen Codes und auch das Ende wäre ja immer das gleiche. Da habe ich ja die Platzhalter [GYG-ANFANG] und [GYG-ENDE] eingetzt.

Jetzt ist die Frage, ob es mit MySQL eine Lösung gibt, nach diesen Platzhaltern zu suchen und alles zwischendrinn zu löschen?
 
Werbung:
Zurück
Oben