2017-08-24 3 views
0

Je suis en train de mettre à jour deux colonnes dans un tableau en utilisant l'opérateur IN commeConfusion au sujet opérateur IN

mysql_query("UPDATE table SET value = value + 1 WHERE column IN ('row1' , 'row2')"); 

mais je remarque que la valeur row1 & row2 est pas mis à jour correctement comme je l'avais pensé . J'ai essayé avec ce même code dans localhost, cela a fonctionné mais sur le serveur de test avec environ 15-20 hits par heure cela ne fonctionne pas. J'ai même bloqué le trafic total du serveur de test et j'ai attendu plus de 12 heures si le serveur était en retard mais cela n'a pas aidé.

j'ai changé mon code pour

mysql_query("UPDATE table SET value = value + 1 WHERE column = 'row1'"); 
mysql_query("UPDATE table SET value = value + 1 WHERE column = 'row2'"); 

Maintenant j'ai commencé à la valeur en temps réel, même avec un trafic légèrement augmenté, environ 25-30 visites par heure. Est-ce que je fais une erreur dans le code, ai-je pris de l'aide de here, ou y a-t-il une limitation dans l'opérateur IN ou est-ce la faute du serveur de test?

Edit: J'utilise un hébergeur gratuit.

+0

'' row1' et row2' est vos valeurs, que vous souhaitez mettre à jour? –

+0

Pouvez-vous partager vos observations? Puisque vous incrémentez la valeur de la colonne, utilisez-vous les transactions internes MySQL ou l'étendue de la transaction à partir du code pour une exclusion mutuelle? Et quand vous avez dit, cela a fonctionné dans localhost, pointez-vous sur le même serveur MySQL ou un serveur différent? –

+0

@chiragsatapara Non, '' row1' et row2' sont deux paramètres avec dans la colonne, disent '' Cat' et Dog' sur deux lignes distinctes dans la colonne 'Animals' et Apprécions être' count'. Quelque chose comme, _mysql_query ("nombre de table UPDATE SET = count + 1 WHERE colonne IN ('Cat', 'Dog')"); _ – NewBee

Répondre

1

Je suppose que c'est le cas classique de la race et de l'utilisation d'aucune technique de synchronisation pour créer le bloc d'exclusion mutuelle. Essayez d'exécuter cette déclaration de mise à jour dans une transaction

+0

Je lis dans un ebook que la fonction 'TRANSACTION' demande plus de ressources donc je l'ai évité. Cependant, si elle passe à l'état 'ROLLBACK', rien ne sera enregistré et je pourrai suivre les données perdues. Je suis complètement nouveau à ceci et ceci est mon premier site tellement désolé pour mes réponses novices. – NewBee

+1

@NewBee Transactions offre une approche «unité de travail» tout ou rien, ce qui est important si vous écrivez à plusieurs tables dans une seule demande/session, comme le traitement des commandes client. Empêcher une écriture indésirable si une requête dans la transaction échoue. Les restaurations se produisent lorsqu'une requête échoue. Vous permettant de gérer l'échec au niveau de l'application, avec la possibilité de revenir à un 'SAVEPOINT' donné. – fyrye

+0

@SunilSinghal @fyrye Merci pour la suggestion à propos de 'TRANSACTION'. Dans mon utilisation actuelle, le décalage n'aura aucune incidence sur les comptes des utilisateurs ou quoi que ce soit sur le site, mais dans d'autres cas, cela pourrait créer des dégâts. Je vais essayer de modifier toutes les tables 'IN' et mises à jour séparément en' TRANSACTION'. :) – NewBee