SQL-Befehl um viele User und alle PNs löschen?

Fragen zur Bedienung von phpBB 3.0.x, Probleme bei der Benutzung und alle weiteren Fragen inkl. Update auf die neuste phpBB 3.0.14 Version
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
fontane
Mitglied
Beiträge: 295
Registriert: 03.02.2013 12:58

SQL-Befehl um viele User und alle PNs löschen?

Beitrag von fontane »

Ich würde gerne zwei SQL-Befehle ausführen.

1. Löschen größerer Anzahl von Usern (z.B. User_ID von 72 bis 184 und 193 bis 369)

Code: Alles auswählen

DELETE FROM `phpbb_users` WHERE `user_id` >= U AND `user_id` <= W;
DELETE FROM `phpbb_users` WHERE `user_id` >= X AND `user_id` <= Z;
Ist vorstehender SQL-Befehl = User-ID größer U oder X und User-ID kleiner W oder Y korrekt?

danach möchte ich

2. ALLE PNs löschen.

Code: Alles auswählen

DELETE FROM `phpbb_privmsgs` WHERE `msg_id` >= X AND `msg_id` <= Y;
Hierzu fehlt mir der korrekte SQL-Befehl (vllt. geht der Vorstehende auch?)

Für eine Hilfestellung vorab besten Dank
Bin leider kein SQL-Profi und frage lieber vorher!
Zuletzt geändert von fontane am 05.09.2013 11:41, insgesamt 1-mal geändert.
phpbb 3.0.4 | PHP 7.4 | MySQL 5.7
Lehrling
Ehemaliges Teammitglied
Beiträge: 3833
Registriert: 15.01.2012 20:00
Kontaktdaten:

Re: SQL-Befehl um viele User und alle PNs löschen?

Beitrag von Lehrling »

Du solltest dich vorher vergewissern, dass sämtliche PNs, die du löschen möchtest, sich nicht mehr im Postfach der User befinden, sonst gibt es Probleme.
Wenn du hier

Code: Alles auswählen

DELETE FROM `phpbb_privmsgs` WHERE `msg_id` >= X AND `msg_id` <= Y;
eine PN löschst, bedeutet das lediglich, dass der Inhalt verschwunden ist. Die Platzhalter für die PN jedoch sind noch da, was dazu führt, dass dein Posteingang z.B. eine neue PN meldet, die es aber gar nicht gibt.
fontane
Mitglied
Beiträge: 295
Registriert: 03.02.2013 12:58

Re: SQL-Befehl um viele User und alle PNs löschen?

Beitrag von fontane »

Lehrling hat geschrieben:Die Platzhalter für die PN jedoch sind noch da, was dazu führt, dass dein Posteingang z.B. eine neue PN meldet, die es aber gar nicht gibt.
Da gibt es ja auch phppbb_prvmsgs_folder. Sollte man da auch etwas tun? Was?
Ziel ist es, alle PNs zu löschen - werden nicht mehr benötigt, nach dem "Löschen" der User bleiben sowieso nur etwa 10 User übrig.
phpbb 3.0.4 | PHP 7.4 | MySQL 5.7
Lehrling
Ehemaliges Teammitglied
Beiträge: 3833
Registriert: 15.01.2012 20:00
Kontaktdaten:

Re: SQL-Befehl um viele User und alle PNs löschen?

Beitrag von Lehrling »

Die Tabelle privmsgs_folder enthält die IDs der Ordner für die gesicherten Nachrichten. Da musst du nichts ändern. Du musst vielmehr die PNs in der Tabelle privmsgs_to löschen. Diese enthält die Platzhalter.
fontane
Mitglied
Beiträge: 295
Registriert: 03.02.2013 12:58

Re: SQL-Befehl um viele User und alle PNs löschen?

Beitrag von fontane »

Lehrling hat geschrieben:Da musst du nichts ändern. Du musst vielmehr die PNs in der Tabelle privmsgs_to löschen. Diese enthält die Platzhalter.
Thanks,

welche SQL-Befehle muss ich ausführen, damit nichts zerschossen wird?

EDIT:

Code: Alles auswählen

DELETE FROM `phpbb_privmsgs` WHERE `msg_id` >= X AND `msg_id` <= Y;
und

Code: Alles auswählen

DELETE FROM `phpbb_privmsgs_to` WHERE `msg_id` >= X AND `msg_id` <= Y;
wäre dies so korrekt?
phpbb 3.0.4 | PHP 7.4 | MySQL 5.7
Lehrling
Ehemaliges Teammitglied
Beiträge: 3833
Registriert: 15.01.2012 20:00
Kontaktdaten:

Re: SQL-Befehl um viele User und alle PNs löschen?

Beitrag von Lehrling »

also, wenn du ohnehin alle PNs löschen willst, dann gehe zunächst in die Tabelle privmsgs, klicke unten auf alle auswählen und dann auf das rote Kreuz rechts davon. Es erfolgt noch einmal eine Abfrage, ob du auch wirklich diese PNs löschen willst, und diese bestätigst du. Dasselbe machst du mit den PNs im Ordner privmsgs_to.

Ich empfehle dir aber vorher das Ganze zu testen. Schick mal einem User eine PN und lösche die dann in der Datenbank und schau mal, ob das geklappt hat.

Hier noch ein paar Erläuterungen zu den PNs an sich. Ich habe mal ein Tutorial für unsere Admins erstellt und das Thema dort behandelt. Wir hatten nämlich das Problem, dass jemand die PNs im Ordner privmsgs gelöscht hatte, aber nicht die im Ordner privmsgs_to. Daraufhin gab es große Probleme, weil bei manchen Usern das Popup "du hast eine neue Nachricht" erschien und sie diese nicht abfragen konnten.
Wie entsteht nun eine Phantom-PN? Wenn in der Datenbank hier eine PN gelöscht wird, also in der Tabelle phpbb3_privmsgs, dann ist die PN als solche zwar verschwunden und gelöscht, nicht aber die Platzhalter in den jeweiligen Postfächern. Es kommt also im Forum zu dem Phänomen, dass z.B. eine neue PN angezeigt wird, die aber nicht da ist, oder dass z.B. im Ordner Gesendete Nachrichten drei PNs angezeiget werden, obwohl nur zwei drin sind, oder dass bei den Gesendeten Nachrichten eine PN gezeigt wird, obwohl der Ordner leer ist.
Damit diese Phantom-PNs nicht mehr erscheinen, muss man sie innerhalb der Datenbank aus den jeweiligen Ordnern löschen. Und da wird es dann kompliziert, denn es ist nicht einfach diese PNs zu finden. Wenn es eine neue PN ist, die gerade kürzlich geschrieben wurde, dann ist es am besten, man schaut erst einmal in der Tabelle nach der msg_id der jeweiligen PN.

Die Platzhalter befinden sich in der Tabelle phpbb3_privmsgs_to. Wir rufen also diese Tabelle auf und geben bei der Suchmaske Nach Schlüssel sortieren msg_id (absteigend) ein.

Ganz rechts steht die folder_id, also die ID des jeweiligen Ordners. Die Ordner haben folgende IDs:

Eine PN, die vom Empfänger gelesen wurde und sich somit im Posteingang des Empfängers befindet, hat die folder_id 0.

Eine PN, die vom Empfänger gelesen wurde, befindet sich außerdem auch im Ordner Gesendete Nachrichten des Absenders, und hat die folder_id -1.

Eine PN, die noch nicht gelesen wurde und sich somit sowohl im Postausgang des Absenders befindet, hat die folder_id -2.

Eine PN, die als Meldung im Postfach des Empfängers angezeigt wird, hat die folder_id -3.

Eine PN, die im Ordner "Gesicherte Nachrichten" des Empfängers angezeigt wird, hat eine folder_id größer als 1.

Hat man die betreffende PN gefunden, dann löscht man sie, indem man auf das rote Kreuzchen klickt.

Auf gar keinen Fall darf man oben auf den Reiter Löschen klicken, denn dadurch löscht man die ganze Tabelle.
fontane
Mitglied
Beiträge: 295
Registriert: 03.02.2013 12:58

Re: SQL-Befehl um viele User und alle PNs löschen?

Beitrag von fontane »

Lehrling hat geschrieben:wenn du ohnehin alle PNs löschen willst, dann gehe zunächst in die Tabelle privmsgs, klicke unten auf alle auswählen und dann auf das rote Kreuz rechts davon. Es erfolgt noch einmal eine Abfrage, ob du auch wirklich diese PNs löschen willst, und diese bestätigst du. Dasselbe machst du mit den PNs im Ordner privmsgs_to.
Hat perfekt geklappt! Beim MySQLdumper klickt man links von der Tabelle auf "leeren und Indizes neu setzen"

Vielen Dank für die Hilfe.
phpbb 3.0.4 | PHP 7.4 | MySQL 5.7
Antworten

Zurück zu „[3.0.x] Administration, Benutzung und Betrieb“