Seite 1 von 1

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

Verfasst: 05.09.2013 10:33
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!

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

Verfasst: 05.09.2013 10:40
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.

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

Verfasst: 05.09.2013 11:11
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.

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

Verfasst: 05.09.2013 11:28
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.

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

Verfasst: 05.09.2013 11:41
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?

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

Verfasst: 05.09.2013 12:01
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.

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

Verfasst: 05.09.2013 12:33
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.