|
Архив - только для чтения |
Модератор форума: andycrowz |
Форум Корзина форума Корзина Sql запрос по очистке данных (двух таблиц) |
Sql запрос по очистке данных |
Нужно удалить определённые предметы в определённом количестве у определённых игроков(тавтология прям), на всё про всё есть itemEntry и гуиды персонажей.
Примерно выглядит это так: Удалить у персонажа с гуидом=111 2предмета с entry = 333. Нужно учесть то, что удалить нужно не все предметы с указанным номером, а лишь необходимое количество. Сообразил пока вот только так: Код SELECT * FROM character_inventory WHERE guid = 2685 and item in ( SELECT guid FROM item_instance WHERE itemEntry = '51947' ); Результат: Т.е. у персонажа 2685 есть 2 итема 51947. Как преобразовать/написать запрос на удаление необходимого количества предметов у персонажа?
Сообщение # 1 написано 26.08.2014 в 13:24
|
там, если предмет в стаке - то будет дрнугой запрос ибо в item_instance стак одной строкой. но если предмет обычный - то вроде запрос верный.
Ну вот я посмотрел вики по таблице http://wiki.ytdb.ru/index.php/Item_instance. Там в столбике text есть вообще все нужные данные (и ИД, и кол-во и ид_чара). Я когда-то работал с этим столбиком. Геморно, но возможно. Если это не для сайта, то не проще ли реализовать это по принципу команды .add (с атрицательным аргументом)? В общем хотелось бы узнать зачем это нужно, чтоб поискать альтернативные варианты.
2.4.3 Blizzlike Server by Evrial - Лучшая 2.4.3 сборка+исходник.
Рисуем итемы для 2.4.3 ГАЙД Создаём свой сервер WoW (подробно и доходчиво) Поистине ловок тот, кто умеет скрывать свою ловкость
Сообщение # 2 написано 26.08.2014 в 16:26
|
Была прописана куча шмота(отсеял лог, вышло 906 строк типа .add 43370 Holysword (GUID: 1229388)]), нужно изъять. Заходить на каждый аккаунт это затянется на месяц.
Поэтому выдумываю что-то более разумное. Предметы в основном не стакающиеся. да, но тут остался один нюанс, вот у персонажа 1229388 есть пять итемов 43370, 2 из них прописные, 3 было изначально у него, как это указать в запросе и возможно ли это вообще? база кстати tdb, в принципе это не играет роли, но поле text пустует по sql погуглил, ничего похожего на удаление n-значений из n+1-одинаковых значений не нашел, либо это настолько банально, либо... |
ThisBetter, просмотрел, но для своего случая ничего не нашел, возможно из-за неопытности...
Сообщение # 5 написано 26.08.2014 в 22:50
|
ну вспоминая тяжкие будни админства... я бы делал надёжно и руками. delete from item_intance where guid in (и тут через запятую 906 значений копипастом...) или через guid between 1 and 10 - ну если там попорядку получилось много. это только выглядит страшно. нарисовать 30 сэтов (а это 250-300) итемов тоже когда-то выглядело страшно. Ты затратишь на копипасту ну 2 часа. и вопрос решён. А теперь главный вопрос. Мы удаляем из item_instance а character_inventory не трогаем. Вот почему: 1. если удалить только из инстанс - то итем всё равно пропадёт. правда в лог напишет мол там нет записи поэтому и эту удалю (ну из инвентаря) 2. можно просто сделать рестарт после заливки и при загрузке само почистит табличку инвентаря 3. для самых дотошных - delete from character_inventory where item not in (select guid from item_instance); - удалит все строки в character_inventory для которых нет записи в item_instance
2.4.3 Blizzlike Server by Evrial - Лучшая 2.4.3 сборка+исходник.
Рисуем итемы для 2.4.3 ГАЙД Создаём свой сервер WoW (подробно и доходчиво) Поистине ловок тот, кто умеет скрывать свою ловкость
Сообщение # 6 написано 27.08.2014 в 00:59
|
infinium, допиши LIMIT 2 и будет тебе счастье.
Сообщение # 7 написано 27.08.2014 в 01:54
|
delete from item_intance where guid in (и тут через запятую 906 значений копипастом...) Если бы были известны эти самые гуиды непосредственно таблицы item_intance, то я бы и не поднимал этот холивар А теперь главный вопрос. Мы удаляем из item_instance а character_inventory не трогаем. Вот почему: 1. если удалить только из инстанс - то итем всё равно пропадёт. правда в лог напишет мол там нет записи поэтому и эту удалю (ну из инвентаря) 2. можно просто сделать рестарт после заливки и при загрузке само почистит табличку инвентаря 3. для самых дотошных - delete from character_inventory where item not in (select guid from item_instance); - удалит все строки в character_inventory для которых нет записи в item_instance Это логично. AdmiralBZ, вот где собака зарыта Код DELETE * FROM character_inventory WHERE guid = 2685 and item in ( SELECT guid FROM item_instance WHERE itemEntry = '51947' ) LIMIT 1; Да этим я потру необходимое число не стакающихся итемов непосредственно у игрока, а item_instance можно почистить Код delete from item_instance where guid not in (select item from character_inventory); Вроде бы вопрос решен. Всем добра. |
Если бы были известны эти самые гуиды непосредственно таблицы item_intance, то я бы и не поднимал этот холивар ответ цитатой: GUID: 1229388 - я полагаю это и есть гуид из item_intance.
2.4.3 Blizzlike Server by Evrial - Лучшая 2.4.3 сборка+исходник.
Рисуем итемы для 2.4.3 ГАЙД Создаём свой сервер WoW (подробно и доходчиво) Поистине ловок тот, кто умеет скрывать свою ловкость
Сообщение # 9 написано 27.08.2014 в 20:44
|
Это гуид персонажа, сколько помню тс, никогда не писался гуид вещи при команде add Да и я же уточнил в самом начале Да этим я потру необходимое число не стакающихся итемов непосредственно у игрока, а item_instance можно почистить Код delete from item_instance where guid not in (select item from character_inventory); Сюда еще дописать проверочку на наличие вещи в ГБ: Код AND guid IN (SELECT item_guid FROM guild_bank_item);
Сообщение # 10 написано 27.08.2014 в 20:57
|
| |||
| |||