我试图从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;
}
答案 0 :(得分:3)
您可以使用 auto incrementing 列。这样你就可以将工作从PHP卸载到MySQL,这总是一件好事。
哦是的,Please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - 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
注意:由于并发性,此方法在重负载下容易出错。