mysql插入函数

时间:2014-03-16 16:34:39

标签: php mysql loops for-loop dml

我正在使用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中,我会转换它,只是帮助我在LOGIC中)

for($x=0;$x<num_rows;$x++)
   {

   if(MINUS = 1){
      query(UPDATE table_name SET ID=ID-1 WHERE ID = $x);}
    }

这样的事情,我仍然是决策循环的新手。如果你能解决我的循环,我将不胜感激。我是这个社区的新手,我求你理解。

2 个答案:

答案 0 :(得分:1)

您可以使用变量或标准SQL在MySQL中执行此操作。这是标准的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

答案 1 :(得分:0)

您可以按如下方式使用MySQL实现:

select id, minus,
   (id - coalesce((select sum(minus) from table t2 where t2.id < t.id), 0)) as newId

来自表t;

代码的想法来自戈登的帖子,这里有一个阐述。

第一部分是select,它表示你想从mysql中选择某些输入。 id, minus跟随,表示您希望在查询运行完毕后返回idminus的值。

其余部分属于第三部分,执行减法,并将减法的值作为newId返回。因此,当sql返回时,它将获得一行ID,MINUS和NEWID作为它的标题。

减法的工作原理如下:coalesce返回列表中的第一个非空值(即1)。 table t2正在使用该表的第二个版本并将其调用为t2,以便您可以比较信息。

我希望这能为你澄清一些事情!