Нужно найти в таблице object_data все объекты которые ставились игроками, по личному ID в столбце Worldspace
При этом список нужных игроков формируется по внутреннему запросу
Рабочий код в фантазиях автора:
SELECT * FROM `object_data` WHERE `Worldspace` LIKE
(
SELECT
CONCAT('%',PlayerUID,'%')
AS PlayerUID
FROM character_data
WHERE LastLogin < DATE_SUB(NOW() , INTERVAL 31 DAY)
AND Alive = 1
)
Проблема состоит в том что LIKE не принимает более одного результата в переменной. Как возможно обойти данное ограничение?
Написал такой запрос:
SELECT * FROM
(
SELECT
CONCAT('%',PlayerUID,'%')
AS PlayerUID
FROM character_data
WHERE LastLogin < DATE_SUB(NOW() , INTERVAL 31 DAY)
AND Alive = 1
) AS t2,
(
SELECT * FROM object_data
) AS t1
WHERE t1.Worldspace LIKE t2.PlayerUID
Работает корректно. Но при смене SELECT * FROM на DELETE FROM, таблица материться на вложенный запрос и показывает полное разнообразие ошибок при попытках заставить сию конструкцию работать.
Думаю, должно работать как-то так:
select od.*
from object_data od
inner join character_data cd on od.Worldspace like CONCAT('%', cd.PlayerUID, '%')
where cd.LastLogin < DATE_SUB(NOW(), INTERVAL 31 DAY) and cd.Alive = 1
Сборка персонального компьютера от Artline: умный выбор для современных пользователей