Mysql güncelleştirme sorgusu Artım değeri

6 Cevap php

Ben +1 puan üzerinden verdikleri için bu kodu yaptık, ancak düzgün çalışmıyor.

mysql_query("
    UPDATE member_profile 
    SET points= ' ".$points." ' + 1 
    WHERE user_id = '".$userid."'
");

$ değişken .. ben bunu istiyorum artı hemen kullanıcının puan noktaları kendisine bir .. yani örnek o 5 puan gibi, 5 +1 = 6 olmalı sanki .. but it doesnt, it just changes to 1

Ne ben yanlış yaptım? teşekkür ederim

6 Cevap

Ayrıca sadece bunu yapabiliriz:

mysql_query("
    UPDATE member_profile 
    SET points = points + 1
    WHERE user_id = '".$userid."'
");

Sen puan gerçek miktarını sorgulamak zorunda kalmadan yapabilirsiniz, bu yüzden size komut dosyası yürütme sırasında bazı zaman ve kaynak tasarrufu olacak.

mysql_query("UPDATE `member_profile` SET `points`= `points` + 1 WHERE `user_id` = '".intval($userid)."'");

Else, ne yanlış yaptıklarını bir dize (points='5'+1) olarak puan eski miktarını geçti, ve bir dizeye bir numara eklemek edemezler. ;)

Benim ilk yazı üzerine offtopic gitmiyorum umut, ama bazı katılımcılar yanlış var görünüyor gibi dize tamsayı döküm biraz genişletmek istiyorum.

Bu sorguda ifade bir aritmetik operatör (artı simgesi +) kullandığı için, MySQL numaralara ifadede herhangi dizeleri dönüştürmek olacaktır.

Göstermek için, şu sonucu 6 elde edilir:

SELECT ' 05.05 '+'.95';

Hiçbir belirsizlik burada var bu yüzden MySQL String birleştirme CONCAT () fonksiyonunu gerektirir ve MySQL yüzer için dizeleri dönüştürür ve bunları birbirine ekler.

Ben aslında $ noktalar değişkeni kullanıcının geçerli puan set değil aslında, çünkü ilk sorgu çalışmıyor nedeni büyük olasılıkla olduğunu düşünüyorum. Ya sıfıra ayarlamak veya unset oldu: MySQL sıfıra boş bir dize döküm olacaktır. Örnek için, aşağıdaki 0 ​​dönecektir:

SELECT ABS('');

Dediğim gibi, ben konu dışı çok varlık değilim umuyoruz. Ben Daan ve Tomas bu sorun için en iyi çözüm olduğunu kabul ediyorsunuz.

Neden PHP iş yapalım değil mi?

"UPDATE member_profile SET points= ' ". ($points+1) ." '  WHERE user_id = '".$userid."'"

Ayrıca, "artış" dizesi, güncelleme, kullanım CONCAT için

update dbo.test set foo=CONCAT(foo, 'bar') where 1=1

' etrafında sökün point:

mysql_query("UPDATE member_profile SET points=".$points."+1 WHERE user_id = '".$userid."'");

Sen orijinal sorguda dize için bir tamsayı değeri "döküm" vardır ...