|
Патчи и наработки Патчи и работы по части БД |
|
Опции темы | Поиск в этой теме | Опции просмотра |
28.09.2011, 20:15 | #1 |
Пользователь
Регистрация: 09.03.2010
Сообщений: 37
Сказал(а) спасибо: 4
Поблагодарили 63 раз(а) в 21 сообщениях
|
[SQL] Заполнение таблиц npc_vendor_template и npc_trainer_template
Давно сделаны коммиты http://ru-mangos.ru/showthread.php?t=3201 и http://ru-mangos.ru/showthread.php?t=2824 , но таблицы с шаблонами почти пустые.
Только в YTDB 607_FIX_11789 появилось 2 шаблона в npc_vendor_template для entry 33238 и 33239 . Кстати, оба шаблона одинаковые по составу . Предлагаю запрос для заполнения таблиц шаблонов. Результаты работы программы : 834 Строки обновлена [0,020c] 10995 Строки вставлена [2,553c] Это стало спелов в npc_trainer_template 834 Строки обновлена [0,012c] Число уникальных шаблонов тренеров 75473 Строки удалена [2,438c] полностью чистим npc_trainer Для вендоров. 1954 Строки обновлена [0,304c] 21689 Строки вставлена [2,378c] 1954 Строки обновлена [0,027c] 34670 Строки удалена [2,146c] Проверил на тестовом сервере, время загрузки ядра чуть-чуть уменьшилось. Результаты свертки npc_trainer показали, что есть довольно много "нестандартных" тренеров, которые отличаются от коллег буквально одним заклинанием. Похожую свертку можно применить уже к таблице npc_trainer_template и поискать "похожих" тренеров. Для наглядности лучше добавить к такой таблице trainer_class , trainer_type и т.д из creature_template и определить, должны ли быть отличия у тренеров. Вендоры еще более разнообразны. Не факт, что это правильно. Лишние шаблоны тренеров\вендоров можно вычистить. Код:
-- Trainers DROP TABLE IF EXISTS temp; -- Делаем временную таблицу -- e - entry тренера -- с - число заклинаний -- s сумма кодов заклинаний, используется в качестве хэш-функции, -- которая позволяет надеяться, что наборы спелов у тренеров одинаковы -- me = min(entry) - будущий entry шаблона CREATE TABLE temp ENGINE = MEMORY SELECT entry AS e , count(spell) AS c , sum(spell) AS s, 1 as me FROM npc_trainer GROUP BY e ORDER BY 3, 2; -- Если таблицу temp почистить от строк, в которых указаны "малоповторяющиеся" тренеры, -- то можно часть информации оставить в npc_trainer, остальное перенести в npc_trainer_templatе . -- Например, после запроса -- delete from temp where temp.s in (select x.s from (SELECT s,count(s) as cs FROM temp GROUP BY s) as x where x.cs=1) -- информацию об "уникальных тренерах" останется в npc_trainer -- сопоставляем тренера с будущим entry шаблона UPDATE temp, (SELECT min(e) AS m , s FROM temp GROUP BY s) AS t SET me = m WHERE temp.S = t.s; -- копируем спелы в шаблон INSERT INTO npc_trainer_template SELECT * FROM npc_trainer where npc_trainer.entry in (select distinct me from temp ); -- прописываем trainer_id всем "шаблонизированным" тренерам UPDATE creature_template, temp set trainer_id=me WHERE entry=e; -- Чистим данные о спелах "шаблонизированных" тренеров. -- Так как в таблице temp все тренеры (даже те, которые уникальные), то запрос аналогичен DELETE FROM npc_trainer . DELETE FROM npc_trainer WHERE entry IN (select e from temp ); DROP TABLE IF EXISTS temp; -- Vendors -- С вендорами поступаем аналогично. CREATE TABLE temp ENGINE = MEMORY SELECT entry AS e , count(item) AS c , sum(item) AS s,1 as me FROM npc_vendor GROUP BY e ORDER BY 3, 2; UPDATE temp, (SELECT min(e) AS m , s FROM temp GROUP BY s) AS t SET me = m WHERE temp.S = t.s; INSERT INTO npc_vendor_template SELECT * FROM npc_vendor where npc_vendor.entry in (select distinct me from temp ); UPDATE creature_template, temp set vendor_id=me WHERE entry=e; DELETE FROM npc_vendor WHERE entry IN (select e from temp ); DROP TABLE IF EXISTS temp; |
4 пользователя(ей) сказали cпасибо: |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
[10873] Fixed crash for case when trainer have only data in npc_trainer_template. | newsbot | CMaNGOS Commits | 0 | 14.12.2010 12:30 |
[10867] Implement templates for trainer spell data in `npc_trainer_template`. | newsbot | CMaNGOS Commits | 0 | 13.12.2010 15:40 |
[10679] New table `npc_vendor_template` for comon item data for diff vendors. | newsbot | CMaNGOS Commits | 0 | 04.11.2010 19:30 |
JOIN таблиц, как написать | DiffuSer | Флудильня | 13 | 23.10.2010 23:32 |