Ru-MaNGOS  

Вернуться   Ru-MaNGOS > База > Патчи и наработки

Важная информация

Патчи и наработки Патчи и работы по части БД

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.09.2011, 20:15   #1
Warlord123
Пользователь
 
Регистрация: 09.03.2010
Сообщений: 37
Сказал(а) спасибо: 4
Поблагодарили 63 раз(а) в 21 сообщениях
Warlord123 Скоро придёт к известности
По умолчанию [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;
Вложения
Тип файла: sql trainer_template.sql (2.1 Кб, 436 просмотров)
Warlord123 вне форума   Ответить с цитированием
4 пользователя(ей) сказали cпасибо:
KiriX (29.09.2011), partizanes (05.04.2012), Ranger (08.11.2011), Кот ДаWINчи (29.09.2011)
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[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


Текущее время: 23:20. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot