WordPress Datenbank – die nützlichsten mySQL Queries

Für WordPress existieren zahlreiche Plugins, die dazu dienen, die Datenbank fit zu halten. Sie stoßen aber manchmal an Ihre Grenzen, vor allem wenn umfangreiche „Sanierungsarbeiten“ an der mySQL-Datenbank nötig werden. Dies kann der Fall sein, wenn

  • ein Blog in die Jahre gekommen ist
  • regelmäßig große Datenmengen importiert wurden oder
  • ein Blog übernommen wurde.

Im Gegensatz zu (schlecht programmierten) Plugins verichten mySQL Queries ihre Arbeit superschnell. mySQL und die dazugehörige Programmiersprache PHP sind für viele WordPress-Nutzer ein Buch mit sieben Siegeln. Daher wollen wir hier kurz auf die richtige Anwendung einer mySQL-Abfrage eingehen. Dein Provider stellt Dir sicher alle nötigen Unterlagen zur Verfügung. Du musst nämlich auf dem Server zum sogenannten phpMyAdmin gehen, was von Provider zu Provider recht unterschiedlich vonstatten geht.

WICHTIG: Bevor Du eine mySQL Query durchführst, sichere unbedingt die Datenbank ! Die unten aufgeführten Abfragen wurden sorgfältig getestet, wir geben aber keinerlei Garantie. Warum? Eine mySQL Query betrifft die ganze Datenbank, daher ist sie einerseits sehr effizient, andererseits – in den falschen Händen – auch ziemlich gefährlich. Für Anfänger ist das also eher nichts.

mySQL Abfragen innerhalb von phpMyAdmin ausführen

Bist Du in phpMyAdmin angelangt, kannst Du nun im Reiterchen „SQL“ Abfragen eingeben (siehe Screenshot). Eine mySQL Query oder auf Deutsch mySQL-Abfrage wird jedes Mal ausgeführt, sobald ein Programm oder ein Nutzer irgendetwas mit der Datenbank tut, also etwas ordnet, löscht, hinzufügt, etwas berechnet, usw. Auch die weithin bekannten Befehle, um die Datenbank zu optimieren und zu reparieren führen natürlich nichts weiter aus, als eine mySQL-Abfrage.

Im oben genannten Reiterchen „SQL“ wird es etwas komplizierter. Hier werden häufig recht komplizierte Programme rein geschrieben, die sehr spezifische Abfragen durchführen können, wie etwa das Löschen aller WordPress Artikel vor einem bestimmten Datum oder die Deaktivierung aller WordPress Plugins.

Hier folgen also nun einige tolle mySQL-Abfragen:

Alte WordPress Artikel löschen

Die folgende mySQL Query löscht alle WordPress Posts vor einer festzulegenden Anzahl von Tagen, also beispielsweise 730 für zwei Jahre. Im unten stehenden Beispiel werden alle Beiträge gelöscht, die älter als ein Jahr sind.

DELETE FROM `wp_posts`
WHERE `post_type` = ‚post‘
AND DATEDIFF(NOW(), `post_date`) > 365

Alle unbenutzten Schlagworte löschen

Gerade wenn man einen in die Jahre gekommenen Blog übernimmt, kann es nützlich sein, alte Schlagworte (Tags) zu löschen. Mit der folgenden mySQL Query geht das ganz bequem:

DELETE FROM wp_terms WHERE term_id IN (SELECT term_id FROM wp_term_taxonomy WHERE count = 0 );
DELETE FROM wp_term_taxonomy WHERE term_id not IN (SELECT term_id FROM wp_terms);
DELETE FROM wp_term_relationships WHERE term_taxonomy_id not IN (SELECT term_taxonomy_id FROM wp_term_taxonomy);

Alle Plugins deaktivieren

Wenn der Server überlastet ist, kann es vorkommen, dass man nicht mehr auf die Plugin-Seite in WordPress zugreifen kann, um dort Plugins zu deaktivieren. Weiss man zusätzlich nicht, welches Plugin Probleme bereitet, kann man mit dieser nützlichen Funktion alle Plugins deaktivieren.

UPDATE wp_options SET option_value = “ WHERE option_name = ‚active_plugins‘;

Als Alternative sei erwähnt, dass man via ftp auf den Server zugreifen kann. Dort genügt es dann, den Ordner „plugins“ (innerhalb von „wp-content“) umzubenennen. Die Datenbank „weiss“ allerdings von dieser Umbenennung nichts, dort bleibt der Eintrag, welche Plugins aktiviert und welche nicht aktiviert sind, weiterhin erhalten.

Alle Post Revisionen löschen inklusive Metadaten

Post Revisions kann man natürlich gut mit verschiedenen Plugins löschen. Auch für diesen Fall gibt es aber natürlich auch eine Datenbank-Abfrage. Noch besser ist natürlich, wenn man die Post Revisions in der wp-config.php blockiert.

DELETE a,b,c FROM wp_posts a WHERE a.post_type = ‘revision’ LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id) LEFT JOIN wp_postmeta c ON (a.ID = c.post_id);

Doppelte Posts löschen

Die nachstehende Abfrage löscht doppelte WordPress Beiträge zuverlässig. Behalten wird dabei derjenige Post mit der tieferen ID, was in den meisten Fällen auch so erwünscht ist.

DELETE a.*
FROM wp_posts AS a
INNER JOIN (
SELECT post_title, MIN( id ) AS min_id
FROM wp_posts
WHERE post_type = ‚post‘
AND post_status = ‚publish‘
GROUP BY post_title
HAVING COUNT( * ) > 1
) AS b ON b.post_title = a.post_title
AND b.min_id <> a.id
AND a.post_type = ‚post‘
AND a.post_status = ‚publish‘

Suchen und Ersetzen

Die Funktion „Suchen & Ersetzen“ ist nicht standardmäßig in WordPress erhalten. Sie kann aber natürlich mit Plugins nachgerüstet werden. Hast Du Dich aber schon einmal gefragt, wie man das direkt in der mySQL-Datenbank erledigen kann? Hier ist die Lösung, wenn man beispielsweise nach dem Umzug eines Blogs die Domain www.domain.de mit domain.com ersetzen möchte:

UPDATE wp_posts SET post_content =
replace(post_content, ‚www.domain.de‘, ‚domain.com‘);

Nicht angehängte Attachments löschen

Auch hierfür existieren mehr oder weniger komfortable Plugins. Oft geht das aber sehr lange, bei großen Websites stundenlang … Blitzschnell geht es mit der folgenden mySQL Query. Aber Achtung, Logos sind oft nicht angehängt, je nach WordPress Theme. Überprüfe das zuerst und hänge das Logo beispielsweise einfach an das Impressum an.

DELETE p1 FROM wp_posts p1 LEFT JOIN wp_posts p2 ON p1.post_parent = p2.ID WHERE p1.post_parent > 0 AND p1.post_type = ‚attachment‘ AND p2.ID IS NULL

Kennst Du weitere nützliche mySQL-Queries für WordPress? Wir freuen uns über Deine Rückmeldung in Form eines Kommentars.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert