我试图从MySql数据库的字段中获取一个整数值,并在添加新记录时将其递增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;
} 发布于 2013-06-07 19:04:32
您可以尝试使用触发器来实现您的目标
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的值将由触发器分配。
这是演示。
即使由于某些原因,您在php中执行此操作而不是两个查询,您也只需要一个查询。
SELECT COALESCE(MAX(idcom_usr), 0) + 1 next_value
FROM user_usr注意:由于并发性,这种方法在负载较重时容易出错。
发布于 2013-06-07 17:30:43
您可以使用列。通过这种方式,您可以将工作从PHP转移到MySQL,这始终是一件好事。
哦对了还有 。它们不再由and are officially deprecated维护。看到了吗?相反,学习,并使用PDO或MySQLi - this article将帮助您决定使用哪种方法。如果你选择PDO,here is a good tutorial。
https://stackoverflow.com/questions/16980638
复制相似问题