如何编写这样的MySQL语句?

|
create table test(
  id ...
  weight ..
);
如何编写这样一条语句,使每条记录的权重至少为先前记录的权重加1?
recordN.weight >=(recordN-1).weight+1
    
已邀请:
您需要先检查一下,然后再插入表格,例如您可以使用查询从表中获取最后一行
select weight from test where id = (select MAX(id) from test);
然后从您要插入的值中比较该重量值,然后
if (newWeight >= weight)
{
   //insert here
}
    
一种方法是将权重存储在变量中,然后在更新语句中使用它
SELECT weight FROM test ORDER BY id DESC LIMIT 1 INTO @weight;
INSERT INTO test (weight) VALUES (@weight+1);
这将获得上一条记录的权重,并在下一条插入语句中使用它(假设您具有自动增量ID)。 您还可以串联查询:
INSERT INTO test (weight) SELECT (weight+1) FROM test ORDER BY id DESC LIMIT 1;
    
听起来很奇怪。您是要更新现有数据,向表中添加新行还是选择按权重排序的数据? 排序最简单,使用SELECT ... ORDER BY weight; 添加一行,您可以使用上一个答案: INSERT INTO test(weight)(SELECT(SELECT(max(weight)+1)FROM test)); 虽然注意 (1)如果您要查找的是MySQL中的自动递增功能; (2)在好的数据库表中,行顺序无关紧要;可以对行进行排序而不会丢失信息。如果您要依靠行顺序执行任何操作,请再次考虑数据库设计。 最后,如果您要更新数据,增加权重,这是一个常见问题。我总是必须在线查找它,所以我会让你这样做:)     

要回复问题请先登录注册