Увеличение и уменьшение значения строки на 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;
}
}
?>
Любые идеи? Спасибо:)
Ответы
Ответ 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 |
+-----+------------+