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 - 14.01.2011

Hmm... , das bedeutet es gibt keine andere Möglichkeit, als jede einzelne ID, die mir dann jemand melden müsste, rauszusuchen und dann zu beseitigen?

Oder gibt es einen MySQL Check & Repair Syntax womit ich das ggf. automatisch reparieren lassen könnte???

Und wäre meine Lösung so richtig???

Code:
DELETE FROM mybb_threadsubscriptions WHERE sid <1

oder

Code:
DELETE FROM mybb_threadsubscriptions WHERE sid <2670

Jetzt nur als Beispiel, zu meinen Fallbeschreibungen.

Oder könnte ich alle auf einen Schlag auch besetigen?

Oder wie finde ich die richtige ID, bin ein wenig damit überfordert leider... Sad


RE: SQL: 1064 - mybb_threadsubscriptions - StefanT - 14.01.2011

Es fehlen ja wahrscheinlich nur einzelne IDs zwischendrin, mit so einem einfachen Query kannst du die nicht zielgerichtet löschen.


RE: SQL: 1064 - mybb_threadsubscriptions - Mithrandir - 14.01.2011

Nur mal so laut gedacht (ich habe das Firmen-interne Forum momentan nicht "griffbereit"):

Würde es mit einer Unterabfrage gehen? Sinngemäß also:

Code:
DELETE FROM mybb_threadsubscriptions WHERE tid Not in(SELECT [ThreadIdFeld] from [ThreadTabelle])

Die Platzhalter in den eckigen Klammern müssen natürlich noch angepasst werden.



Wer DELETE-Abfragen so absetzt, sollte sich über das Risiko bewusst sein (Backup wird empfohlen) - sicherheitshalber könnte man sich auch erst einmal das Ergebnis von
Code:
SELECT * FROM mybb_threadsubscriptions WHERE tid Not in(SELECT [ThreadIdFeld] from [ThreadTabelle])
anschauen und ein paar Stichproben machen, ob die gelisteten Thread-IDs passen.

Unterabfragen sind meist ziemlich lahm, deshalb könnte das ein wenig dauern, je nach Umfang der beteiligten Tabellen.


RE: SQL: 1064 - mybb_threadsubscriptions - StefanT - 14.01.2011

Bei jedem Datensatz sämtliche Themen zu laden, killt dir den Server. Wink Aber die Richtung ist schon gut.


RE: SQL: 1064 - mybb_threadsubscriptions - thebod - 14.01.2011

Manuell per Script die Subscriptions durchlaufen, tid checken und sofern nicht vorhanden Löschen. (Dabei aber nicht sid=[aktuelle subscription id] sondern tid=[nicht vorhandene tid], damit sparst du dir einiges.)

Btw.:
< 1 ist "kleiner eins", sprich 0 oder weniger Wink Wird nicht helfen bei IDs


RE: SQL: 1064 - mybb_threadsubscriptions - happyspeedy - 14.01.2011

Nun, irgendwie verstehe ich gerade nur noch Bahnhof, das ist ja richtig ärgerlich, verstehe nicht, warum so ein Fehler überhaupt entsteht in der Datenbank. Sad


RE: SQL: 1064 - mybb_threadsubscriptions - Mithrandir - 14.01.2011

@Stefan; War ja auch schon meine Vermutung (ich hatte meinen Beitrag kurz vorher noch angepasst).

Dann würde ich eine entsprechende "Inkonsistenzabfrage" mittels JOIN basteln - die Ergebnisse (ids) daraus per Komma getrennt ins IN() ("NOT" in der obigen Syntax muss dann enfernt werden!) packen.

Eine Inkonsistenzabfrage in MS Access (also Jet-SQL) zusammengeklickt sieht so aus - MySQL wird's vielleicht anders benötigen:
Code:
SELECT mybb_threadsubscriptions.tid
FROM mybb_threadsubscriptions LEFT JOIN threadtabelle ON mybb_threadsubscriptions.tid = threadtabelle.tid
WHERE threadtabelle.tid Is Null
Es gilt wieder, dass die Feld- und Tabellennamen (speziell bzgl. threadtabelle) angepasst werden müssen.


Auf jeden Fall ist das ein Bugreport wert: Foreign-Keys sollten so nicht übrig bleiben können. Aber vermutlich ist das der Kompatibilität zu älteren MySQL-Versionen geschuldet.


RE: SQL: 1064 - mybb_threadsubscriptions - Mithrandir - 15.01.2011

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)




RE: SQL: 1064 - mybb_threadsubscriptions - happyspeedy - 17.01.2011

Ich hab noch eine andere Idee, vielleicht ist ja die Lösung einfacher, wie lösche ich Abonnements ab einem bestimmten Datum von allen Benutzern?

Also quasi Beispiel von 2005 - 2004 ???

So wäre das Problem sicherlich auch gelöst?


RE: SQL: 1064 - mybb_threadsubscriptions - StefanT - 17.01.2011

Das kann man nicht sicher sagen, es können ja zwischendrin Themen fehlen...