MYSQL - Wieviele H1,H2,H3,H4,H5 habe ich in meiner Datenbank?
llewas
- mysql
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
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
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
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
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
Hi,
Vorschlag von MadGuard.
Mud, nicht Mad!!!
cu,
Andreas a/k/a MudGuard
Hallo MudGuard,
Vorschlag von MadGuard.
Mud, nicht Mad!!!
Yo, 🧐 sry. Nicht mein Tag aber irgendwie auch wieder lustig finde ich.
Gruss
Henry
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
Danke, hat mir sehr geholfen.
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
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
Hallo Andreas,
also für mich sind "<h2 "
und "<h2>"
gleich lang. Etwas anderes wird nicht gematcht.
Oder verstehe ich was miss?
Rolf
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