Использование запроса SQL для копирования строк и редактирования значения, но необходимо его немного улучшить - PullRequest
0 голосов
/ 11 июля 2020

Я нашел запрос на копирование инвентаря игрока для базы данных игры (для модерации), поэтому я могу ввести свое имя пользователя вместо своего characterId (имя из таблицы символов, а инвентарь состоит из предметов и не имеет столбец имени, но characterId), я попытался использовать соединение для замены characterId именем, но оно работает только с символом, который я хочу скопировать, а не с символом, куда он вставлен

DELETE i FROM items i
JOIN characters c ON c.characterId=i.characterId
WHERE c.name='Name1'

INSERT INTO items (characterId , itemId , amount , sort , equipSlot , maxUpgrade , currentUpgrade , statMod , isTradable , uniqueId , attached)
    SELECT 1 , itemId , amount , sort , equipSlot , maxUpgrade , currentUpgrade , statMod , isTradable , uniqueId , attached
    FROM items i 
    JOIN characters c ON i.characterId=c.characterId
WHERE c.name='Name2'

Итак, «Name1» (мой персонаж) имеет для accountId 1, а персонаж, которого я хочу скопировать, его инвентарь «Name2» имеет для characterId 2, поэтому для моего запроса вместо SELECT 1 , itemId... я хочу иметь возможность использовать SELECT "Name1" , itemId..., поэтому нет необходимости использовать другой запрос для поиска characterId путем поиска имени, а затем получения characterId для реализации в запросе

1 Ответ

0 голосов
/ 11 июля 2020

Лучшее решение. Проверьте это.

INSERT INTO ITEMS (CHARACTERID,
                   ITEMID,
                   AMOUNT,
                   SORT,
                   EQUIPSLOT,
                   MAXUPGRADE,
                   CURRENTUPGRADE,
                   STATMOD,
                   ISTRADABLE,
                   UNIQUEID,
                   ATTACHED)
SELECT C2.CHARACTERID,
       I.ITEMID,
       I.AMOUNT,
       I.SORT,
       I.EQUIPSLOT,
       I.MAXUPGRADE,
       I.CURRENTUPGRADE,
       I.STATMOD,
       I.ISTRADABLE,
       I.UNIQUEID,
       I.ATTACHED
  FROM ITEMS I
       INNER JOIN CHARACTERS C
          ON I.CHARACTERID = C.CHARACTERID AND C.NAME = 'Name2'
       INNER JOIN CHARACTERS C2 ON C2.NAME = 'Name1'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...