Подтвердить что ты не робот

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

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

Я работаю в jQuery и проверял varibles/posts в 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;   
}
}
?>

Любые идеи? Спасибо:)

4b9b3361

Ответ 1

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

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

это совершенно правильный запрос, как вы можете видеть дальше:

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;

Ответ 2

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

$query="UPDATE table_name SET `hit_count`=(`hit_count`+1) WHERE `id` = '1'";

Ответ 3

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

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

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

Ответ 4

update table_name set  col_name=col_name+1   where sqId = 12

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

Ответ 5

update 'tablename' set 'columnname1'='columnname1' + 1 where 'columnname2'='value';

например: update students set englishmarks=englishmarks + 1 where name='Rahul';

Изменение: (Пояснение) Ключевое слово "ОБНОВЛЕНИЕ" используется для обновления Vaule в таблице. Здесь я обновляю значение в таблице "студенты". Ключевое слово "SET", обновляющее английские отметки на 1 (как в языке C, как мы увеличиваем значение целого числа, я = я + 1), и указывается условие, где name - "Rahul".

Таким образом, английские знаки Рахула увеличиваются на 1

Ответ 6

В миграции Laravel сделать:

\DB::statement('SELECT @pos:=0;');
\DB::statement('UPDATE users SET company_id = ( SELECT @pos := @pos + 1 ) WHERE 'id' = '1';');

Если вы хотите изменить все записи, удалите WHERE id = '1'

Он вставит приращение числа в ваши записи, например:

+-----+------------+
|  id | company_id |
+-----+------------+
|   1 |      1     |
|  12 |      2     |
|  23 |      3     |
+-----+------------+