Mysql обновление, если (некоторые заявления)
Я хочу создать обновление MySQL только в том случае, если таблица не содержит указанного значения (если у игрока пустой слот)
Моя идея:
update player_items
set slot=20
where id=0
and uid=2
and (SELECT COUNT(*)
FROM player_items
WHERE slot=12 and uid=2) = 0;
Я надеюсь, что это может быть только один вопрос MySQL
1 ответ
Одним из способов сделать это является использование шаблона против объединения, например
UPDATE player_items p
LEFT
JOIN ( SELECT uid
FROM player_items
WHERE slot = 12
AND uid = 2
LIMIT 1
) q
ON q.uid = p.uid
SET p.slot = 20
WHERE p.id = 0
AND p.uid = 2
AND q.uid IS NULL
LEFT JOIN ищет соответствующую строку, но если соответствующая строка не найдена, MySQL сгенерирует строку со всеми значениями NULL. Мы можем отфильтровать любые строки, которые соответствуют, используя q.uid IS NULL
предикат, поэтому мы будем получать только те строки, где не было совпадений.
mysql> UPDATE player_items p
-> LEFT
-> JOIN ( SELECT uid
-> FROM player_items
-> WHERE slot = 12
-> AND uid = 2
-> LIMIT 1
-> ) q
-> ON q.uid = p.uid
-> SET p.slot = 20
-> WHERE p.id = 0
-> AND p.uid = 2
-> AND q.uid IS NULL
-> ;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0