Beiträge: 342
Themen: 57
Registriert seit: 28.10.2005
MyBB-Version: 1.6.9
Dann ist das ja wirklich eine sehr komplexe Angelegenheit, ich möchte nicht unnötig die Datenbank crashen...
Gibt es nicht eine Art Verknüpfungscheck, ähnlich wie bei den Attachments, so nach dem Motto suche verwaiste Abonnements, das würde doch eine Problemlösung sein, oder arbeitet das System ein wenig anders an dieser Stelle?
Fragen kostet nix, keine Fragen stellen kann Zeit kosten :-)
Beiträge: 25.762
Themen: 269
Registriert seit: 20.09.2005
Ja, das ist das, was Mithrandir gepostet hat.
Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Beiträge: 2.318
Themen: 13
Registriert seit: 09.11.2008
17.01.2011, 10:41
(Dieser Beitrag wurde zuletzt bearbeitet: 17.01.2011, 10:44 von frostschutz.)
Den Umweg mit CSV Export muss man ggf. gar nicht gehen, DELETE ... WHERE tid IN (SELECT ...) sollte auch tun. Vielleicht etwas langsamer... aber da man das eh nur einmal macht, egal. Prüfen daß das SELECT das richtige Ergebnis liefert, sollte man allerdings schon vorher.
Ungetestet:
Code:
DELETE FROM mybb_threadsubscriptions WHERE tid NOT IN (SELECT tid FROM mybb_threads)
...und ich habe natürlich zu spät gesehen, daß das schon so geschrieben wurde. Von daher... ... ... warum diskutiert ihr das überhaupt noch?
Beiträge: 35
Themen: 2
Registriert seit: 17.10.2010
MyBB-Version: 1.6
17.01.2011, 17:39
(Dieser Beitrag wurde zuletzt bearbeitet: 17.01.2011, 17:43 von Mithrandir.)
Zitat:warum diskutiert ihr das überhaupt noch?
Frage ich mich auch - vielleicht stehe ich auf einer Ignorierliste oder habe nach happyspeedys Einschätzung zu wenig Beiträge für eine vernünftige Lösung.
@happyspeedy: Zum "Nicht-Zerschiessen-Wollen": Wozu gibt's Backups oder lokale Testsysteme? Wenn du mittels der ersten Abfrage (die mit dem LEFT JOIN) aus meinem vorherigen Beitrag (Nr. #18) einige IDs findest, weißt du, dass du auf dem richtigen Weg bist. Mit der Abfrage sollte eigentlich nichts kaputtgehen (ist ja nur eine SELECT-Abfrage).
MfG,
Mithrandir
MyBB 1.6 im Intranet unter Ubuntu 10.04.1 Server
Beiträge: 25.762
Themen: 269
Registriert seit: 20.09.2005
Mein Vorschlag (auch ungetestet
):
Code:
DELETE FROM mybb_threadsubscriptions s WHERE (SELECT t.tid FROM mybb_threads t WHERE s.tid=t.tid) IS NULL
Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Beiträge: 342
Themen: 57
Registriert seit: 28.10.2005
MyBB-Version: 1.6.9
19.01.2011, 09:21
(Dieser Beitrag wurde zuletzt bearbeitet: 19.01.2011, 09:21 von happyspeedy.)
(15.01.2011, 10:42)Mithrandir schrieb: Ich hab's mal lokal mit MyBB 1.6 getestet. Ich übernehme keine Garantie für absolut richtige Funktion - wäre schön, wenn einer der Profis hier das noch testen und ggf. korrigieren könnte.
Wir gehen davon aus, dass das Problem dadurch hervorgerufen wird, dass es noch Abonnements gibt, die auf gelöschte Threads verweisen. Wir müssen also zunächst die IDs der nicht mehr vorhandenen Threads ermitteln (s. 1.), diese IDs exportieren wir (2.) und benutzen diese in einer Löschabfrage (3.).
1.) Ermitteln der Abos, die auf IDs nicht mehr vorhandener Threads verweisen
Im phpmyadmin folgende Abfrage abschicken:
Code:
SELECT mybb_threadsubscriptions.tid
FROM mybb_threadsubscriptions
LEFT JOIN mybb_threads ON mybb_threadsubscriptions.tid = mybb_threads.tid
WHERE mybb_threads.tid IS NULL
2.) Export der ermittelten IDs
Das Ergebnis aus 1.) exportieren mittels Klick auf "Exportieren". In der Folge auf "CSV" klicken, danach bei den Optionen einige Felder leeren (s. [Leer]) und den Zeilentrenner von "AUTO" auf "," setzen:
Code:
Felder getrennt mit [Leer] (steht standardmäßig auf ";")
Felder eingeschlossen von [Leer] (Standard: ")
Felder escaped von \
Zeilen getrennt mit , (Standard: AUTO)
Ersetze NULL durch NULL
[kein Haken] bei Feldnamen in die erste Zeile setzen
OK klicken
Man erhält eine durch Komma getrennte Liste der IDs (Beispiel: 2,4,7,), diese kopiert man bis auf das letzte Komma, also hat man z.B. 2,4,7 in der Zwischenablage.
3.) Löschabfrage erstellen und abschicken:
Die unter 2.) kopierte Liste bei [HierDeineListe] einfügen und Abfrage ausführen:
Code:
DELETE FROM mybb_threadsubscriptions WHERE tid IN([HierDeineListe])
Beispiel:
Code:
DELETE FROM mybb_threadsubscriptions WHERE tid IN(2,4,7)
Genau das hat mir geholfen!!! Super !!! Ich kam leider erst jetzt dazu, aber einwandfrei !!!
Vielen, vielen, vielen Dank euch allen !!!
Erledigt !!
Fragen kostet nix, keine Fragen stellen kann Zeit kosten :-)