J'ai deux tables qui ont besoin des mêmes valeurs exactes à des fins de dénormalisation.
Voici la requête.
première table
UPDATE Table_One
SET win = win+1, streak = streak+1, score = score+200
WHERE userid = 1 AND lid = 1 LIMIT 1
deuxième table
UPDATE Table_Two
SET win = win+1, streak = streak+1, score = score+200
WHERE userid = 1 LIMIT 1
Comme vous pouvez le constater, la seule différence entre les deux tables est leur nom et la table deux n'a pas le champ lid
Quoi qu'il en soit, combiner les deux mises à jour à une seule?
Cela devrait être possible avec une mise à jour multi-table, comme décrit dans la documentation.
http://dev.mysql.com/doc/refman/5.5/fr/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
Remarque: Multi-table ne prend pas en charge LIMIT, cela pourrait donc causer plus de problèmes en fonction des détails.
Les procédures stockées ou les transactions peuvent être une solution plus intéressante.
S'il existe une relation un à un ou un à plusieurs de Table_One à Table_Two, ceci fonctionnerait:
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;
Il s’agit de deux requêtes distinctes et doivent donc être traitées comme telles. Désolé de le dire, mais si vous mettez à jour deux tables avec des données identiques, il existe probablement un meilleur moyen de concevoir votre base de données. N'oubliez pas de garder votre programmation _ SÈCHE .
Edit: devrait rétracter cela; vous pouvez l’utiliser pour plusieurs tables, mais vous ne pouvez pas utiliser ORDER BY
ou LIMIT
.
Si vous pouvez joindre les tables, vous pouvez créer une vue de deux tables, puis mettre à jour via cette vue. Dans votre exemple, il semble que userid pourrait être une clé appropriée.
Lors de la création de la vue, vous devez vous en tenir à la instructions suivantes .