【问题标题】:Increase and decrease row value by 1 in MySQLMySQL中的行值增加和减少1
【发布时间】:2011-02-19 13:30:24
【问题描述】:

您好,我有一个 MySQL 数据库表“点”,用户可以单击一个按钮,并且应该从他们的帐户中删除一个点,他们按下的按钮具有另一个用户的 ID,因此他们的帐户必须增加一个。

我让它在 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;   
}
}
?>

有什么想法吗?谢谢:)

【问题讨论】:

  • 你忘了说问题本身
  • 哦,对不起,它不会增加或减少行...我在 mysql 中测试了它们,它们工作正常。
  • mysql_error() 可能有助于找到问题
  • 问题:你得到了什么结果? “成功” / 1 ?
  • @Elliot 如果是 AJAX 调用,你怎么能看到错误?

标签: php sql mysql


【解决方案1】:

在 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     |
+-----+------------+

【讨论】:

    【解决方案2】:

    不需要增加/减少字段值的两个查询:

    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; 的输出

    【讨论】:

    • UPDATE xyz, SET Column=Column+n WHERE ... 是非常标准的 SQL,我敢打赌,由于某种原因,OP 的 sql 字符串没有按照他们想要的方式构建,因此建议显示 $query1 和 $query2 .我敢打赌,看到它们的内容后问题就会变得明显。
    • 您好,谢谢,每个查询的回声都和我上面写的查询一样。
    • 修好了,又重新写了一遍,好像还可以,哈哈,谢谢
    • 它对我有用,除了在减少时,无法使值达到 0(它停在 1 并且进一步减少没有效果)。该字段是一个定义为“非空”的 INT NOT。有什么建议吗?
    【解决方案3】:
    update 'tablename' set 'columnname1'='columnname1' + 1 where 'columnname2'='value';
    

    例如:update students set englishmarks=englishmarks + 1 where name='Rahul';

    编辑:(解释) “UPDATE”关键字用于更新表中的值。在这里,我正在更新表“学生”中的值。 "SET" 关键字将英文标记更新为 1(就像在 C 语言中,我们如何增加整数的值,i=i+1)并在名称为 "Rahul" 时给出条件。

    所以拉胡尔的英文标记加 1

    【讨论】:

      【解决方案4】:
      update table_name set  col_name=col_name+1   where sqId = 12
      

      但如果您的col_name 默认值为 null 或为空,则它永远不会起作用,因此请确保col_name 默认值为0 或任何整数值。

      【讨论】:

        【解决方案5】:

        这是示例查询,经过我的测试,它正在 100% 工作

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

        【讨论】:

        • 欢迎来到stackoverflow。请务必在发布之前阅读以前的答案。因为这与公认的答案基本相同。最好不要打扰古老的线索,除非回复添加了以前答案中缺少的重要内容。
        • 感谢@Raj Kumar das
        猜你喜欢
        • 2013-04-08
        • 2015-01-29
        • 1970-01-01
        • 2019-04-18
        • 1970-01-01
        • 2012-05-30
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多