Предлагаю
собрать в одном месте все sql запросы, помогающие выявить неверные
и/или некорректные записи, дабы было проще отлавливать их. Так как
базы постоянно обновляются, есть необходимость каждый раз проверять на
наличие таких ошибок, чтобы состояние баз стремилось к идеальному :)
Когда запросов накопится достаточно, можно будет написать утилиту проверки.
Вот пока что пришло первым в голову... Выкладывайте и свои запросы, которыми вы часто пользуетесь :)
Код:
# вещи на которых можно навариться SELECT * FROM `item_template` WHERE (`sellprice` * `buycount` > `buyprice`) and entry in (select item from npc_vendor); SELECT
* FROM `item_template` WHERE (`buycount` = 0) AND (`sellprice` >
`buyprice`) and entry in (select item from npc_vendor);
#лишние записи по игрокам (все "SELECT *" можно смело менять на "DELETE" ) SELECT * FROM `character_action` where guid not in (select guid from `character`); SELECT * FROM `character_aura` where guid not in (select guid from `character`); SELECT * FROM `character_homebind` where guid not in (select guid from `character`); SELECT * FROM `character_inventory` where guid not in (select guid from `character`); SELECT * FROM `character_kill` where guid not in (select guid from `character`); SELECT * FROM `character_pet` where guid not in (select guid from `character`); SELECT * FROM `character_queststatus` where guid not in (select guid from `character`); SELECT * FROM `character_reputation` where guid not in (select guid from `character`); SELECT * FROM `character_social` where guid not in (select guid from `character`); SELECT * FROM `character_spell` where guid not in (select guid from `character`); SELECT * FROM `character_spell_cooldown` where guid not in (select guid from `character`); SELECT * FROM `character_stable` where guid not in (select guid from `character`); SELECT * FROM `character_ticket` where guid not in (select guid from `character`); SELECT * FROM `character_tutorial` where guid not in (select guid from `character`); SELECT * FROM `corpse` where `player` not in (select guid from `character`); SELECT * FROM `character_inventory` where item not in (SELECT guid FROM `item_instance`); SELECT * FROM `item_instance` where guid not in (SELECT item FROM `character_inventory`); SELECT * FROM `character_queststatus` where quest not in (select `entry` from `quest_template`); SELECT * FROM `character_social` where `friend` not in (select guid from `character`);
# неверные предметы у продавцов ("SELECT *" -> "DELETE" для очистки) SELECT * FROM `mangos`.`npc_vendor` WHERE `item` not in (SELECT `entry` FROM `item_template`);
# предметы для продажи есть, однако NPC не может их продать (flag не содержит 4) # фиксить: # или изменить флаг (если это действительно продавец), # или удалить записи из npc_vendor (если не продавец) SELECT * FROM `creature_template` WHERE (`entry` in (SELECT `entry` from `npc_vendor`)) AND (`npcflag` & 4 <> 4);
# несуществующие продавцы SELECT * FROM `npc_vendor` WHERE `entry` not in (SELECT `entry` from `creature_template`);
# несуществующие тренеры SELECT * FROM `npc_trainer` WHERE `entry` not in (SELECT `entry` from `creature_template`);
# простая проверка на квесты (вообще их куча как в ядре, так и в моей программе) SELECT * FROM `mangos`.`quest_template` where minlevel>questlevel
# аукцион SELECT * FROM `auctionhouse` where `auctioneerguid` not in (select guid from `character`); SELECT * FROM `auctionhouse` where `itemowner` not in (select guid from `character`);
# мобы с маленькими / неверными жизнями / уровнями SELECT * FROM `mangos`.`creature` where curhealth < 20; SELECT * FROM `mangos`.`creature_template` where minhealth>maxhealth; SELECT * FROM `mangos`.`creature_template` where (minhealth< 20 ) or (maxhealth<20); SELECT * FROM `mangos`.`creature_template` where minlevel>maxlevel; SELECT * FROM `mangos`.`creature_template` where (minlevel=0) or (maxlevel=0);
# несуществующие мобы SELECT * FROM `creature` c where id not in (select entry from creature_template);
Цитата:
Сообщение от ZzZzZzZ
А как же фиксы на 2 первых запроса?
Код:
UPDATE
`item_template` SET `sellprice` = (`buyprice` /`buycount`) WHERE
(`sellprice` * `buycount` > `buyprice`) and entry in (select item
from npc_vendor); UPDATE `item_template` SET `sellprice` =
`buyprice` WHERE (`buycount` = 0) AND (`sellprice` > `buyprice`) and
entry in (select item from npc_vendor);
Теперь не наварятся =) |
Также можно пользоватся php языком.
К примеру: UPDATE (обновить) SET (ecnfyjdbnm) WHERE (где) INSERT (вставить) SELECT (извлечь) TRUNCATE (очистать) и так далее. И уж описать как они принимаются. К примеру: SELECT(извлечь)
*(любое значение) FROM(из) 'realmd'(наименование таблицы) where(где)
ip_realm(имя строки) = 127.0.0.1(значение строки). Запросы что просто к БД напрямую,запросы через интерпритатор все одинаковы
DELETE FROM `item_template` WHERE `entry` = 1
Ну это как пример удаления колонок в таблицах. В этом примере мы удаляем из таблицы item_template вешь под номером 1
|