J'ai une table qui contient les éléments que les utilisateurs de mon jeu possèdent. Si un utilisateur achète un nouvel élément, il devrait être inséré, mais s'il l'a déjà, il devrait être augmenté à la place. Je comprends que je peux utiliser INSERT ... ON DUPLICATE KEY UPDATE
, mais je ne comprends pas comment dans mon problème.Comment insérer une ligne, mais en double; le mettre à jour à la place?
Le item_id
n'est pas unique, car de nombreux joueurs peuvent posséder la même arme (c'est-à-dire un mot long). Le user_id
n'est pas unique non plus, car un joueur peut posséder de nombreux objets.
Alors, ma question est de savoir comment faire la requête UPDATE
au lieu de INSERT
si une ligne contenant à la fois le user_id
et item_id
existe déjà?
La copie est détectée en fonction de la contrainte de clé primaire ou de toute autre contrainte/index unique sur la table. En fait, on dirait que vous avez une colonne "quantité". Si vous insérez une ligne, vous voulez que la quantité soit 1. Si vous mettez à jour parce que le joueur en a déjà 1, alors vous voulez que la quantité soit incrémentée ... ON DUP KEY UPDATE ne fera que rendre la ligne existante voulait insérer. Vous devrez faire comme je le suggère, ou chercher la présence de la rangée en premier. Je préfère mon chemin. –
BTW, mon raisonnement: Vérification d'abord prend toujours deux requêtes. Essayer, et vérifier le résultat, ne prend que deux requêtes si c'est un dup. –
Désolé, j'ai supprimé mon commentaire après votre modification. D'accord, je me demandais simplement s'il était possible de le faire avec seulement une requête. – Phoexo