MySql обновляет сразу две таблицы

У меня есть две таблицы, для которых нужны точные значения для целей денормализации.

Здесь запрос.

первая таблица

UPDATE Table_One 
SET win = win+1, streak = streak+1, score = score+200 
WHERE userid = 1 AND lid = 1 LIMIT 1

вторая таблица

UPDATE Table_Two 
SET win = win+1, streak = streak+1, score = score+200 
WHERE userid = 1 LIMIT 1

Как вы можете видеть, единственное различие между обеими таблицами - это их имя, а в таблице 2 нет поля lid

В любом случае, чтобы объединить оба обновления только с одним?

Ответы

Ответ 1

Это может быть возможно при обновлении с несколькими таблицами, как описано в документации.

http://dev.mysql.com/doc/refman/5.5/en/update.html

UPDATE Table_One a INNER JOIN Table_Two b ON (a.userid = b.userid)
SET
  a.win = a.win+1, a.streak = a.streak+1, a.score = a.score+200,
  b.win = b.win+1, b.streak = b.streak+1, b.score = b.score+200 
WHERE a.userid = 1 AND a.lid = 1 AND b.userid = 1

Примечание. Multi-table не поддерживает LIMIT, поэтому это может привести к болью в зависимости от деталей.

Сохраненные процедуры или транзакции могут быть более приятным решением.

Ответ 2

Если между Table_One и Table_Two существует отношение один к одному или от одного до большого, это будет работать:

UPDATE Table_One T1, Table_Two T2 
SET T1.win = T1.win+1, T1.streak = T1.streak+1, T1.score = T1.score+200, 
    T2.win = T2.win+1, T2.streak = T2.streak+1, T2.score = T2.score+200 
WHERE T1.userid = 1 AND T1.lid = 1 AND T2.userid = T1.userid;

Ответ 3

Theyre два отдельных запроса и поэтому должны рассматриваться как таковые. Извините, однако, если вы обновляете две таблицы с одинаковыми данными, возможно, лучший способ создать базу данных. Не забудьте сохранить свое программирование DRY.

Изменить: следует отменить это; вы можете использовать его для нескольких таблиц, но вы не можете использовать ORDER BY или LIMIT.

Ответ 4

Если вы можете присоединиться к таблицам, вы можете создать представление о двух таблицах, а затем обновить это представление. В вашем примере это выглядит как userid.

При создании представления вам необходимо придерживаться следующих рекомендаций.