Character die zu keinem Acc gehören?

Hallo ihr lieben,

gibt es eine Möglichkeit mit einem Befehl oder Script herauszufinden welche Charakter in der Datenbank umhergeistern wozu es den dazu gehörigen Account gar nicht mehr gibt?

Liebe Grüße

Über einen Querry kannst du das machen.

select * from char_db.characters where account not in (select id from realm_db.account);

Möchtest du nicht die kompletten Daten eines Characters haben, kannst du statt dem * auch einen oder mehrere Werte setzen. z.B.:

select name from char_db.characters where account not in (select id from realm_db.account);

oder

[/CODE]select name, guid from char_db.characters where account not in (select id from realm_db.account);

Danke hat super funktioniert /emoticons/default_smile.png

Gibt es eine Möglichkeit auch so einzustellen per Befehl das er die dann gleich löscht?

Das ist schwieriger. Da ein einfaches Löschen aus der characters table die ganzen Anhängsel nicht löscht. Also die Items des Chars, die Spells und so weiter. Das bleibt dann alles als Leiche in der Char DB. Solche Chars solltest du lieber löschen, indem du die ingame GM Befehle dafür nutzt, oder aber du dem Char in der Char DB den Namen und die Accountzuweisung löscht und die dann in den letzen Spalten der Tabelle mitsammt nem Timestamp setzt. Mit entsprechender Config übernimmt die Core das Löschen dann selbst.

Also nach laaaaaangen rum tüfteln und Probieren bin ich auf die Lösung gekommen, auch wenn man das bei jeder Tabelle dann machen muss um seine Datenbank von veralteten Chars los zu werden, ist es so noch immer besser als nen Charwipe oder so etwas

Also um alle Charakter zu Löschen die zu keinem Account mehr gehören muss man einfach

delete characters from db_char.characters where account not in (select id from db_logon.account);

Und wenn man dann auch noch die ganzen Items, Talente, Spells, Gilden u.s.w löschen will dann muss man einfach

delete character_talent from db_char.character_talent where guid not in (select guid from db_char.characters);

Man muss einfach das character_talent immer umschreiben zb in character_inventory oder guild u.s.w und wenn es guid nicht gibt, was die Zahl des Charakter ist kann man des Guid auch einfach immer umschreiben in z.b bei Gilden

delete guild from db_char.guild where leaderguid not in (select guid from db_char.characters);

Und schon löscht man alle Gilden die es den Leader schon gar nicht mehr in der Datenbank gibt

Ich hoffe ich hab es etwas verständlich ausgedrückt, eigentlich ist es wenn man es einmal begreift sehr einfach, somit kann man selectieren und löschen in der char und realm db wie man lustig und launig is ^^

Sollte jemand einfach hilfe dazu brauchen, kann er mich auch gerne noch mal anschreiben /emoticons/default_smile.png

Klingt dezent hacky… such dir lieber die Namen raus und feuer sie mit dem char erase Command in die Console. Ooooder schieb sie auf einen Account und lösch den Account via Console. Letzteres weiß ich nicht obs geht.

Des Weiteren:

SELECT guid, name FROM characters LEFT JOIN auth.account ON account.id=characters.account WHERE account.id IS NULL;

Findet alle Chars die einen Account haben, der nicht mehr existiert.

UPDATE characters LEFT JOIN auth.account ON account.id=characters.account SET characters.account=NEUE_ID WHERE account.id IS NULL;

Oder:

DELETE characters FROM characters LEFT JOIN auth.account ON account.id=characters.account WHERE account.id IS NULL;

Subselects sind langsam und unschön. Zwar einfach, aber nicht schön. JOINs sind das, was du hier brauchst /emoticons/default_smile.png