我正在用MySQL数据库创建一个简单的PHP网页。MYSQL数据库有以下内容:(左边的插图),我只想知道一种可能的方法来进行一些数据操作,以实现下面右边的结果。
(initial value) (final result)
ID | MINUS '1'(to "next" ID's) ID | ID |
1 | 0 1 | ------------> 1 |
2 | 1 --> (will minus '1' to ID 3 2 | ------------> 2 |
3 | 0 up to the last) 3-1 = 2 | ------------> 2 |
4 | 0 4-1 = 3 | ------------> 3 |
5 | 1 --> (minus '1' AGAIN to ID 6 5-1 = 4 | ------------> 4 |
6 | 0 up to the last) 6-1 = 5 -1 ---> 4 |
7 | 0 7-1 = 6 -1 ---> 5 | 它只是计算减号,然后减去它后面的所有ID。ID 2告诉下一个ID,它是3,将1减去到最后一个ID,(3-1,4-1,5-1,6-1,7-1 ),但是另一个实例出现了。ID 5告诉ID 6从ID 6到最后ID再减去2,从6-1,7-1 -> 6-2,7-2。
我知道这听起来很容易,但我只是一个新手,发现这件事很难。很抱歉头痛。希望有人帮忙,谢谢!
我的DML类似于(为了说明,这应该在php中,我会转换它,只是在逻辑上帮助我)
for($x=0;$x<num_rows;$x++)
{
if(MINUS = 1){
query(UPDATE table_name SET ID=ID-1 WHERE ID = $x);}
}就像这样,我仍然是决策圈的新手。如果你能修好我的回路,我将不胜感激。我是这个社区的新手,恳请大家谅解。
发布于 2014-03-16 16:41:58
您可以在MySQL中使用变量或标准SQL执行此操作。下面是标准的SQL:
select id, minus,
(id - coalesce((select sum(minus) from table t2 where t2.id < t.id), 0)) as newId
from table t;以下是可变版本:
select id, minus,
(id - minus + (@value := @value + minus)) as newId
from table t cross join
(select @value = 0) const
order by id发布于 2014-03-16 17:16:37
您可以按以下方式使用MySQL实现:
select id, minus,
(id - coalesce((select sum(minus) from table t2 where t2.id < t.id), 0)) as newId从表t;
代码的想法来自Gordon的文章,下面是一个详细的说明。
第一部分是select,它声明您希望从mysql中选择特定的输入。id, minus如下所示,这意味着您希望在查询完成后返回id和minus的值。
其馀部分属于第三部分,执行减法,并将减法的值返回为newId。因此,当sql返回时,它将得到一个ID、减号和NEWID作为标题的行。
减法如下所示:合并将返回列表中的第一个非空值(即1)。table t2正在使用该表的第二个版本,并将其命名为t2,以便您可以比较信息。
我希望这能为你澄清一些事情!
https://stackoverflow.com/questions/22439597
复制相似问题