2008-12-05 11 views
4

dire p.products_price est égal à 1mysql update mathématiques

pourquoi est:

UPDATE products p 
SET p.products_price = (1 + p.products_price) 
WHERE p.products_id = 8 

make p.products_price est égal à 3?

Il ajoute 1 au prix et ensuite tout recommencer? J'essaie de faire quelque chose d'un peu plus compliqué mais quand ça n'a pas fonctionné, je l'ai réduit à la plus simple des choses. Est-ce que je peux faire une sorte de valeur temporaire ici et calculer le nouveau prix, puis le mettre à cela?

S'il vous plaît aider je rage, Merci.

MySQL version client: 4.1.22

modifier: la colonne est de type décimal, j'ai essayé la même mise à jour sur une colonne int avec le même résultat.

edit: cela ne fonctionne pas dans le code donc il n'y a aucune chance de le code appelant la même mise à jour deux fois

+0

J'ai eu ce qui semble être exactement le même problème, bien qu'il semble que le lorsque la page Web en question est rafraîchie 2 est ajouté, mais sur la charge/exécution initiale du script, il ajoute 1 correctement. Est-ce que cela donne une idée à quelqu'un? – t1m0thy

Répondre

0

Cela devrait certainement mis products_price à 2. Il doit y avoir quelque chose d'autre se passe.

Ceci est similaire à Problem with updating a MySQL field with PHP mais il n'y avait pas de bonne solution là-bas donc je vais laisser celui-ci aussi ouvert.

L'exécutez-vous à partir du client ou d'un script?

Avez-vous des transactions ouvertes ou d'autres scripts accédant à la base de données? Editer: Vous avez mentionné les jointures dans votre commentaire - Je serais prêt à parier que votre jointure revient sur la même ligne plus d'une fois.

+0

rien d'autre ne se passe, je l'ai d'abord fait à travers un script PHP, mais maintenant je le lance dans phpmyadmin. la vraie mise à jour a quelques jointures et peut en avoir aussi. –

+0

Ahh je parie que c'est les jointures - vous devez sélectionner la même rangée plus d'une fois – Greg

+0

non je cours littéralement le sql ci-dessus et il fait toujours cela, même si je dis 'où product_id = 200' :( –

0

Votre SQL a l'air bien. La colonne 'quelque chose' est-elle unique? Assurez-vous que vous mettez à jour un seul enregistrement.

+0

quelque chose en ce moment est un ID utilisateur, il n'y a qu'une seule ligne que cette mise à jour correspond. 1 ligne affectée est-il possible de mettre à jour deux fois la même ligne? –

4
UPDATE products  
SET products_price = (1 + products_price)  
WHERE products_id = 8 

fonctionne comme il se doit (« p » alias de table supprimés)

+0

Bizarre ... +1 pour le corriger si – Greg

+3

La syntaxe était erronée ... Il manquait 'AS': 'METTRE À JOUR les produits AS p SET p. products_price = (1 + p.products_price) O WH p.products_id = 8' – Malta