MyBB.de Forum
SQL: 1064 - mybb_threadsubscriptions - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Archiv (https://www.mybb.de/forum/forum-57.html)
+--- Forum: MyBB 1.6.x (https://www.mybb.de/forum/forum-58.html)
+---- Forum: Allgemeiner Support (https://www.mybb.de/forum/forum-59.html)
+---- Thema: SQL: 1064 - mybb_threadsubscriptions (/thread-17662.html)

Seiten: Seiten: 1 2 3


RE: SQL: 1064 - mybb_threadsubscriptions - happyspeedy - 17.01.2011

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?


RE: SQL: 1064 - mybb_threadsubscriptions - StefanT - 17.01.2011

Ja, das ist das, was Mithrandir gepostet hat.


RE: SQL: 1064 - mybb_threadsubscriptions - frostschutz - 17.01.2011

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?


RE: SQL: 1064 - mybb_threadsubscriptions - Mithrandir - 17.01.2011

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. Wink



@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).


RE: SQL: 1064 - mybb_threadsubscriptions - StefanT - 17.01.2011

Mein Vorschlag (auch ungetestet Wink):
Code:
DELETE FROM mybb_threadsubscriptions s WHERE (SELECT t.tid FROM mybb_threads t WHERE s.tid=t.tid) IS NULL




RE: SQL: 1064 - mybb_threadsubscriptions - happyspeedy - 19.01.2011

(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 !! Big Grin