0

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

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

php代码

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;

    }           
4

2 回答 2

3

您可以让列自动递增。通过这种方式,您可以将工作从 PHP 转移到 MySQL,这总是一件好事。

哦,是的,请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2013-06-07T09:30:42.570 回答
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

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

于 2013-06-07T11:04:32.213 回答