Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Increase and decrease row value by 1 in MySQL

Tags:

sql

php

mysql

Hi I have a MySQL database table "points" the user can click a button and a point should be removed from their account, the button they pressed has an ID of another user, therefore their account must increase by one.

I have it working in jQuery and checked the varibles/posts in Firebug, and it does send the correct data, such as:

userid= 1  posterid = 4 

I think the problem is with my PHP page:

<?php   include ('../functions.php');  $userid=mysql_real_escape_string($_POST['user_id']); $posterid=mysql_real_escape_string($_POST['poster_id']);  if (loggedin())  { include ('../connection.php'); $query1 = "UPDATE `points` SET `points` = `points` - 1 WHERE `userID` = '$userid'"; $result1=mysql_query($query1);   $query2 = "UPDATE `points` SET `points` = `points` + 1 WHERE `userID` = '$posterid'"; $result2=mysql_query($query2);   if ($result1 && result2) {     echo "Successful";       return 1; } else {      echo mysql_error();     return 0;    } } ?> 

Any ideas? Thanks :)

like image 717
Elliott Avatar asked May 14 '10 14:05

Elliott


People also ask

What is %s and %D in MySQL?

%d – the argument is treated as an integer, and presented as a (signed) decimal number. %s – the argument is treated as and presented as a string. in your examples, $slug is a string and $this->id is an integer.

How do I limit one row in MySQL?

In MySQL the LIMIT clause is used with the SELECT statement to restrict the number of rows in the result set. The Limit Clause accepts one or two arguments which are offset and count. The value of both the parameters can be zero or positive integers.


1 Answers

Two queries to increase/decrease field value are not necessary:

mysql_query("UPDATE table SET field = field + 1 WHERE id = $number"); 

is a perfectly valid query as you can see next:

mysql> describe points; +--------+---------+------+-----+---------+-------+ | Field  | Type    | Null | Key | Default | Extra | +--------+---------+------+-----+---------+-------+ | uid    | int(11) | NO   | PRI | NULL    |       | | points | int(11) | YES  |     | 0       |       | +--------+---------+------+-----+---------+-------+ 2 rows in set (0.05 sec)  mysql> insert into points VALUES (1,0),(2,0); Query OK, 2 rows affected (0.14 sec)  mysql> select * from points; +-----+--------+ | uid | points | +-----+--------+ |   1 |      0 | |   2 |      0 | +-----+--------+ 2 rows in set (0.05 sec)  mysql> update points set points = points+1 where uid = 1; Query OK, 1 row affected (0.27 sec) Rows matched: 1  Changed: 1  Warnings: 0  mysql> select * from points; +-----+--------+ | uid | points | +-----+--------+ |   1 |      1 | |   2 |      0 | +-----+--------+ 2 rows in set (0.00 sec) 

Having that tested, are you sure you get into your if (loggedin()) clause?

I have to agree with KM, would be nice to see output of echo $query1; or echo $query2;

like image 120
acm Avatar answered Oct 04 '22 19:10

acm