在MySql中增加int值

时间:2013-06-07 09:25:08

标签: php mysql

我试图从MySql数据库中的字段获取int值,并在添加新记录时将其递增1。发生了什么,是当插入记录时,它放置1而不是添加一个字段的值。例如,在最后一条记录中,值为10,因此在运行查询后,该值应为11.

我很难理解为什么这样做不起作用,如果有人能就如何将我的代码修改为可行的解决方案提出任何建议,我将不胜感激。非常感谢

php code

function get_ref(){
     $query = "SELECT MAX(`id_usr`) AS `max` FROM `user_usr`";
     $result = mysql_query($query) or die(mysql_error());
     $row = mysql_fetch_assoc($result);
     $max = $row['max'];    

    $sql = 'select idcom_usr'           
    . ' from user_usr'
    . " where id_usr = '$max'"
    . ' order '
    . ' by id desc'
    . " limit 1";
    $result = mysql_query($sql);
    $ref = mysql_result($result,0,"idcom_usr");
    return $ref + 1;

    }           

2 个答案:

答案 0 :(得分:3)

您可以使用 auto incrementing 列。这样你就可以将工作从PHP卸载到MySQL,这总是一件好事。

哦是的,Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 1 :(得分:2)

您可以尝试使用触发器实现目标

CREATE TRIGGER tg_user_usr_insert
BEFORE INSERT ON user_usr
FOR EACH ROW
    SET NEW.idcom_usr = (SELECT COALESCE(MAX(idcom_usr), 0) + 1 FROM user_usr);

然后当您插入新行时

INSERT INTO user_usr (idcom_usr) VALUES (0),(0);

触发器将分配idcom_usr的值。

这是 SQLFiddle 演示。

即使出于某种原因你在php而不是两个查询中进行,你只需要一个

SELECT COALESCE(MAX(idcom_usr), 0) + 1 next_value 
  FROM user_usr

注意:由于并发性,此方法在重负载下容易出错。