Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Suchen und löschen von unterschiedlichen Codes

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von michaelxxx, 13 Dezember 2019.

  1. michaelxxx

    michaelxxx Benutzer

    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
     
  2. Walter

    Walter Administrator Mitarbeiter

    Replace und Regex sind dein Freund.
     
  3. michaelxxx

    michaelxxx Benutzer

    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
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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=#
    
     
  5. michaelxxx

    michaelxxx Benutzer

    cool, Danke! Das probier ich dann gleich mal aus :)
     
  6. akretschmer

    akretschmer Datenbank-Guru

    achtung, ich verwende PostgreSQL ...
     
  7. michaelxxx

    michaelxxx Benutzer

    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?
     
  8. ukulele

    ukulele Datenbank-Guru

    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.
     
  9. michaelxxx

    michaelxxx Benutzer

    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?
     
  10. Walter

    Walter Administrator Mitarbeiter

    Verschoben vom Microsoft-SQL-Server ins Mysql-Forum.
     
  11. michaelxxx

    michaelxxx Benutzer

    Hat sich erledigt, ich habe eine andere Möglichkeit der Integration mit einem Plugin gefunden :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden