Увеличивайте и уменьшайте значение строки на 1 в MySQL


Привет, у меня есть таблица базы данных MySQL "точки", пользователь может нажать кнопку, и точка должна быть удалена из их учетной записи, кнопка, которую они нажали, имеет идентификатор другого пользователя, поэтому их учетная запись должна увеличиться на единицу.

Я запустил его в jQuery и проверил переменные/сообщения в Firebug, и он действительно отправляет правильные данные, такие как:

userid= 1 
posterid = 4

Я думаю, что проблема в моей странице PHP:

<?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;   
}
}
?>

Есть идеи? Спасибо:)

Author: Gumbo, 2010-05-14

4 answers

Два запроса для увеличения/уменьшения значения поля не требуются:

Mysql_query ("ОБНОВИТЬ поле набора таблиц = поле + 1, ГДЕ id = $число");

Является вполне допустимым запросом, как вы можете видеть далее:

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)

Проверив это, вы уверены, что попали в свое предложение if (loggedin())?

Я должен согласиться с KM, было бы неплохо увидеть вывод echo $query1; или echo $query2;

 58
Author: acm, 2010-05-14 14:53:32

Вот пример запроса, протестированного мной, и он работает на 100%

$query="UPDATE table_name SET `hit_count`=(`hit_count`+1) WHERE `id` = '1'";
 5
Author: Raj Kumar Das, 2012-05-02 16:00:47

Попробуйте добавить что-нибудь, чтобы распечатать вашу фактическую команду SQL, прежде чем if ($result1 && result2):

ECHO '$query1='.$query1.'<br>';
ECHO '$query2='.$query2.'<br>';

Это поможет увидеть, что он отправляет в базу данных

 2
Author: KM., 2010-05-14 14:30:05

Обновить имя_таблицы, установить имя_кола=имя_кола+1, где sqid=12

Но если ваше значение "col_name" По умолчанию равно нулю или пусто, оно никогда не работает, поэтому убедитесь, что значение по умолчанию col_name равно 0 или любому целочисленному значению.

 1
Author: Zeeshan Akhter, 2014-05-06 07:34:36