如何编写这样的MySQL语句?

时间:2011-04-13 06:57:46

标签: mysql sql

create table test(
  id ...
  weight ..
);

如何编写这样的陈述,使每条记录的权重至少是前一记录的权重加1?

recordN.weight >=(recordN-1).weight+1

3 个答案:

答案 0 :(得分:0)

您需要在插入表格之前检查它,例如您可以使用查询

从表中获取最后一行
select weight from test where id = (select MAX(id) from test);

然后从您插入的值和

中比较此权重值
if (newWeight >= weight)
{
   //insert here
}

答案 1 :(得分:0)

其中一种方法是将权重存储在变量中,然后在更新语句中使用它

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;

答案 2 :(得分:0)

听起来很奇怪。您是在更新现有数据,向表中添加新行还是选择按权重排序的数据?

排序最简单,使用SELECT ... ORDER BY weight;

添加一行,您可以使用上一个答案: INSERT INTO测试(重量)(SELECT(最大(重量)+1)FROM测试);

虽然注意到了 (1)如果你正在寻找的话,MySQL中有一个自动增量功能; (2)在良好的DB表中,行顺序并不重要;可以对行进行排序,而不会丢失信息。如果您依赖行顺序,请再次考虑数据库设计。

最后,如果您尝试更新数据,增加权重,这是一个常见问题。我总是要在网上查找,所以我会让你这样做:)