Beiträge: 34
Themen: 11
Registriert seit: 12.05.2015
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
Beiträge: 2.244
Themen: 33
Registriert seit: 25.05.2018
MyBB-Version: 1.8.38
22.09.2020, 16:53
(Dieser Beitrag wurde zuletzt bearbeitet: 22.09.2020, 16:53 von Schnapsnase.)
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".
Beiträge: 1.710
Themen: 177
Registriert seit: 08.02.2018
MyBB-Version: 1.8.37
22.09.2020, 16:56
(Dieser Beitrag wurde zuletzt bearbeitet: 22.09.2020, 16:59 von Gerti.)
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_users` WHERE postnum=0 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
Sollte ich der Ansicht sein helfen zu können biete ich Hilfe(n) an! ...ich bitte jedoch nicht darum helfen zu dürfen!
Tools ◀ [
Unixzeit ⇔ Realzeit] ♦ [
BOM-Finder] ♦ [
SQL-Prefix-Changer] ♦ [
USV-Rechner] ♦ [
PlugIns]
Beiträge: 34
Themen: 11
Registriert seit: 12.05.2015
(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
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
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.
Beiträge: 1.136
Themen: 39
Registriert seit: 27.08.2014
23.09.2020, 14:42
(Dieser Beitrag wurde zuletzt bearbeitet: 23.09.2020, 15:03 von StefanT.
Bearbeitungsgrund: Vollzitat entfernt
)
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.
Beiträge: 25.762
Themen: 269
Registriert seit: 20.09.2005
frostschutz hat wahrscheinlich auch nicht Plugins gemeint, sondern die ganzen anderen Tabellen des MyBB.
Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
(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).
Beiträge: 1.136
Themen: 39
Registriert seit: 27.08.2014
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.