create table test(
id ...
weight ..
);
如何编写这样的陈述,使每条记录的权重至少是前一记录的权重加1?
recordN.weight >=(recordN-1).weight+1
答案 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表中,行顺序并不重要;可以对行进行排序,而不会丢失信息。如果您依赖行顺序,请再次考虑数据库设计。
最后,如果您尝试更新数据,增加权重,这是一个常见问题。我总是要在网上查找,所以我会让你这样做:)