将1添加到字段

Add 1 to a field

来源: link 标签:phpmysql 更新时间:

  问题

如何将以下2个查询转换为1个查询

 $sql    = "SELECT level FROM skills WHERE id = $id LIMIT 1;";
$result = $db->sql_query($sql);
$level  = (int) $db->sql_fetchfield('level');
$db->sql_freeresult($result);

++$level;

$sql    = "UPDATE skills SET level = $level WHERE id = $id;";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);
 

我在phpBB mod中使用它,但要点是我抓住级别,添加一个然后更新,如果我可以作为一个查询执行它,似乎会更容易和更快.

编辑:$id已经被迫成为整数,因此这次不需要逃避.

  最佳答案

我得到这个模式吗?

 $sql = "UPDATE skills SET level = level+1 WHERE id = $id";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);
 

在 Teifion 的特定情况下,phpBB DDL 将特定字段列为 NOT NULL,因此没有递增 NULL 的危险。

在一般情况下,你不应该使用NULL来表示零.递增NULL应该给出NULL的答案.如果你是一种错误的开发人员,认为NULL = 0,离开键盘并找到另一个消遣时间,你只是在为我们其他人努力生活.当然,这是计算机产业,我们是谁说你错了?如果你不错,使用

 $sql = "UPDATE skills SET level = COALESCE(level,0)+1 WHERE id = $id";
 

但是让我们面对这个问题:你错了。如果每个人从0级开始,那么你的DDL应该包括

 level INT DEFAULT '0' NOT NULL
 

如果程序员在创建记录时忘记设置它.如果不是每个人都从级别0开始,那么跳过DEFAULT并强制程序员在创建时提供值.如果有些人超级,对他们来说,级别是毫无意义的事情,那么将一个添加到他们的级别就没有意义.在这种情况下,从DDL中删除NOT NULL.

  相同标签的其他问题

phpmysql