llewas: MYSQL - Wieviele H1,H2,H3,H4,H5 habe ich in meiner Datenbank?

Hallo,

ich bin im ersten Lehrjahr, und beschäftige mich seit kurzem mit MYsql. Leider ist mein Ausbilder heute auf Lehrgang daher dachte ich mir, ich frage mal hier im Forum (benutze sonst gerne die FAQ von selfhtml) ;-) .

Ich habe Zugang über PHPMyAdmin auf eine Mysql Datenbank (Wordpress). Hier werden in der Tabelle wp_posts alle Inhalte des CMS verwaltet.

Über den Querry


SELECT * FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_content` LIKE '%<h2>%'

kann ich mir alle Inhalte anzeigen lassen die ein H2 enthalten. Natürlich kann es vorkommen das in einem Artikel mehrfach ein H2 vorkommt. Ein Count würde hier also ein falsches Ergebnis bringen.

Im Normalfall würde ich jetzt mit PHP in den Spalte post_content nach dem <h2> suchen. Allerdings habe ich nur Zugriff auf PHPMyAdmin.

Hat hier jemand eine Idee? Exportieren als CSV und dann selbst zählen?

Danke

eure llewas

  1. Hallo llewas,

    
    SELECT * FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_content` LIKE '%<h2>%'
    

    kann ich mir alle Inhalte anzeigen lassen die ein H2 enthalten. Natürlich kann es vorkommen das in einem Artikel mehrfach ein H2 vorkommt. Ein Count würde hier also ein falsches Ergebnis bringen.

    Wieso sollte das ein falsches Ergebnis bringen?

    SELECT COUNT(wp_posts) WHERE…

    Gruss
    Henry

    --
    Meine Meinung zu DSGVO & Co:
    „Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“
    1. Hi,

      kann ich mir alle Inhalte anzeigen lassen die ein H2 enthalten. Natürlich kann es vorkommen das in einem Artikel mehrfach ein H2 vorkommt. Ein Count würde hier also ein falsches Ergebnis bringen.

      Wieso sollte das ein falsches Ergebnis bringen?

      Schreibt er doch: weil dann ein Datensatz nur einmal auftaucht/gezählt wird, auch wenn er z.B: "<h2>bla</h2><h2>blubb</h2>" enthält.

      cu,
      Andreas a/k/a MudGuard

    2. Hallo,

      SELECT * FROM `wp_posts` WHERE `post_status` = 'publish' AND `post_content` LIKE '%<h2>%'
      

      kann ich mir alle Inhalte anzeigen lassen die ein H2 enthalten. Natürlich kann es vorkommen das in einem Artikel mehrfach ein H2 vorkommt. Ein Count würde hier also ein falsches Ergebnis bringen.

      Wieso sollte das ein falsches Ergebnis bringen?

      ich verstehe das so, dass sie die Gesamtzahl aller <h2> in allen gefundenen Datensätzen zählen will.

      
      > SELECT COUNT(wp_posts) WHERE

      Das liefert nur die Anzahl der Datensätze, die mindestens ein <h2> enthalten.

      Ciao,
       Martin

      --
      Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
      1. Hallo Der,

        > SELECT COUNT(wp_posts) WHERE

        Das liefert nur die Anzahl der Datensätze, die mindestens ein <h2> enthalten.

        Ups, ja richtig, hatte das falsch verstanden und mich deshalb auch gewundert. Natürlich geht dann der suchen/ersetzen/differenz zählen Vorschlag von MadGuard.

        Gruss
        Henry

        --
        Meine Meinung zu DSGVO & Co:
        „Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“
        1. Hi,

          Vorschlag von MadGuard.

          Mud, nicht Mad!!!

          cu,
          Andreas a/k/a MudGuard

          1. Hallo MudGuard,

            Vorschlag von MadGuard.

            Mud, nicht Mad!!!

            Yo, 🧐 sry. Nicht mein Tag aber irgendwie auch wieder lustig finde ich.

            Gruss
            Henry

            --
            Meine Meinung zu DSGVO & Co:
            „Principiis obsta. Sero medicina parata, cum mala per longas convaluere moras.“
  2. Hi,

    Im Normalfall würde ich jetzt mit PHP in den Spalte post_content nach dem <h2> suchen. Allerdings habe ich nur Zugriff auf PHPMyAdmin.

    Was bieten die String-Funktionen von mysql? Gibt's da was wie countOccurrences oder so?

    Wenn nicht:

    select sum(
        (length(DeineSpalte) - length(replace(DeineSpalte, '<h2>', '')))/length('<h2>')
    ) 
    from ...
    

    Also die Länge des Strings nehmen, davon die Länge abziehen, die sich durch Ersetzen von <h2> durch nichts ergibt, und durch eben diese Länge teilen. Das ergibt die Anzahl der <h2> in einem Datensatz - darüber summiert ergibt die Gesamtzahl.

    cu,
    Andreas a/k/a MudGuard

    1. Danke, hat mir sehr geholfen.

      1. Hallo llewas,

        vorsicht, das funktioniert nur für <h2>, nicht für <h2 class="foo">. Wenn Du das machst, suche nur nach '%<h2%'.

        Wenn Du MYSQL 8 hast, kannst Du auch regex_replace verwenden und '<h2[ >]' durch '' ersetzen.

        Rolf

        --
        sumpsi - posui - clusi
        1. Hi,

          vorsicht, das funktioniert nur für <h2>, nicht für <h2 class="foo">. Wenn Du das machst, suche nur nach '%<h2%'.

          Wenn Du MYSQL 8 hast, kannst Du auch regex_replace verwenden und '<h2[ >]' durch '' ersetzen.

          Ne, dann funktioniert das Teilen nicht mehr wg. Unterschiedlicher Länge.

          Eher mit '<h2'.

          cu,
          Andreas a/k/a MudGuard

          1. Hallo Andreas,

            also für mich sind "<h2 " und "<h2>" gleich lang. Etwas anderes wird nicht gematcht.

            Oder verstehe ich was miss?

            Rolf

            --
            sumpsi - posui - clusi
            1. Hi,

              also für mich sind "<h2 " und "<h2>" gleich lang. Etwas anderes wird nicht gematcht.

              Oder verstehe ich was miss?

              Ne, ich hab den Regex nicht wirklich wahrgenommen, hab halt gesehen, daß Du was mit Attributen hattest, und das könnte natürlich unterschiedlich lang sein …

              Sorry, ja, mit Deinem Regex ginge es auch. Aber m.E. wird es in 99,9999% der Fälle ausreichen, ohne Regex nach <h2 zu suchen.

              Ja, das könnte auch in einem Attributwert stehen (<h1 title="das ist kein <h2>">), aber diese Gefahr bestünde bei dem Regex auch.

              cu,
              Andreas a/k/a MudGuard