MyBB.de Forum

Normale Version: löschen von Usern mit Filter nach "lastvisit"
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Forumsadmin's,

ich betreibe ein relativ überschaubares Forum mit derzeit ca. 550 angemeldeten Benutzern. Gerne würde ich alle Benutzer löschen, die sich z.B. die letzten 4 Jahre nicht mehr im Forum angemeldet haben. Leider habe ich im CP Admin keine Funktion finden können um nach letzter Aktivität Benutzer zu listen bzw. zu filtern. Gibt es ein schon bekanntes SQL query mit dem ich z.B. alle Benutzer ohne deren Beiträge löschen kann die sich z.B. letztmalig bis zum 31.12.2017 angemeldet haben? Ich denke mal es wird nur die mybb_users Tabelle angefasst werden müssen.
Macht mein Vorhaben überhaupt Sinn oder habe ich etwas wichtiges übersehen wegen unschönen Seiteneffekten. 

Danke im voraus und Gruß - Chris
Das geht eigentlich ohne Query und ohne großen Aufwand.
ACP -> Benutzer und Grupen -> Benutzer finden
Hier kannst Du unten nach letzte Aktivität - aufsteigend sortieren.
Benutze dann die Tabellen-Ansicht. So kannst Du ganze Seiten mit Benutzern auswählen und löschen.
Wenn Du nur die Benutzer löschst bleiben die Beiträge incl. Benutzernamen erhalten.
Die gelöschten Benutzer haben dann lediglich den Status/Gruppenzugehörigkeit "Gast".
Variante 1 via ACP (Anlehnung an Beitrag von Schnapsnase)
Zitat:ACP > Benutezr & Gruppen > ganz rechts Ansichten > Ansichten verwalten > Optionen > Ansicht bearbeiten
dort nach belieben die Ansicht einstellen und dann  kannst Du jeweilige eingestellte Anzahl der "Anzeigen nach Deinem Auswahlkriterium" in einem Rusch löschen.

Variante 2 via SQL-Befehl: (als Anregung)
PHP-Code:
DELETE FROM `mybb_usersWHERE postnum=AND regdate<1514588399 
> im vorstehendem Beispiel werden alle User mit 0 Postings und Registrierung vor dem Datum X (Unixtime verwenden)
>> Es können wahlweise verschiedene und/oder mehrere Auswahlkriterien definiert werden
(22.09.2020, 16:53)Schnapsnase schrieb: [ -> ]Das geht eigentlich ohne Query und ohne großen Aufwand.
ACP -> Benutzer und Grupen -> Benutzer finden
Hier kannst Du unten nach letzte Aktivität - aufsteigend sortieren.
...super und danke. Genau das hatte ich komplett übersehen, da ganz unten nur über die Auswahlbox "Letzte Aktivität" sichtbar gemacht werden kann.

Gruß Chris
Falls es Unterforen gibt, deren Beiträge nicht mitgezählt werden, kann man mit postnum=0 allerdings auch den falschen erwischen.

Einfach so Einträge aus der users Tabelle zu löschen kann auch Probleme machen. Da gibt es neben posts noch weitere Abhängigkeiten zu anderen Tabellen.
Die Abhängigkeiten bzw. Fremdschlüssel lassen sich auch so mit einem normalen Delete über das ACP nicht löschen, sofern diese in der Funktion delete_user() nicht berücksichtigt wird. Ich denke aber der Autor hat schon eine Lösung gefunden.
frostschutz hat wahrscheinlich auch nicht Plugins gemeint, sondern die ganzen anderen Tabellen des MyBB.
(23.09.2020, 14:42)itsmeJAY schrieb: [ -> ]Die Abhängigkeiten bzw. Fremdschlüssel lassen sich auch so mit einem normalen Delete über das ACP nicht löschen, sofern diese in der Funktion delete_user() nicht berücksichtigt wird.

Ist doch eben gerade genau das was delete_user() macht?

Fürs einfache Löschen werden da zig Datenbanktabellen angefasst und zudem noch Plugin-Hooks aufgerufen, sodass etwaige Plugins ihren benutzerbezogenen Krempel auch aufräumen können. Anschließend werden denn noch Caches erneuert.

Wenn dann was nicht stimmt dann ist es ein Bug (in MyBB oder -Plugins) aber an der Datenbank direkt hantieren berücksichtigt sowas halt gar nicht. Das sollte man nur machen wenn man sich wirklich auskennt (und eigentlich selbst dann nicht).
Das ist richtig. So war das auch von mir gemeint. Lieber die dafür vorgesehenen Funktionen nutzen anstatt unsauber in der Datenbank über Abfragen zu arbeiten. Einst wurde die Programmierung mit entsprechender Logik versehen um dies nicht tun zu müssen. Möglich wäre auch eine Implementierung der Funktionen (oder Klassen) in eine eigene PHP Datei und anschließend die Funktion delete_user() aufrufen mit den erwarteten Parametern. Aber naja... viele Wege führen nach Rom.