Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql插入函数_Php_Mysql_Loops_For Loop_Dml - Fatal编程技术网

Php mysql插入函数

Php mysql插入函数,php,mysql,loops,for-loop,dml,Php,Mysql,Loops,For Loop,Dml,我正在用MySQL数据库创建一个简单的PHP网页。 MYSQL数据库包含以下内容:左图 我只是想知道一种可能的方法,通过对数据进行处理来获得下面右边部分的结果 (initial value) (final result) ID | MINUS '1'(to "next" ID's) ID | ID | 1 | 0

我正在用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。ID2告诉下一个ID,即3减去1到最后一个ID,3-1,4-1,5-1,6-1,7-1,但另一个实例出现了。ID 5告诉ID 6再次减去自身直到最后一个ID,因此从ID 6减去2直到最后一个ID。从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);}
    }

诸如此类,我仍然是决策循环的新手。如果您能修复我的环路,我将不胜感激。我是这个社区的新手,请您理解。

您可以在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;

您可以按如下方式使用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后面是减号,表示您希望在查询运行完成后返回id和减号的值

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

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


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

你能分享你迄今为止尝试过的代码吗?如果我们知道你尝试了什么,我们会更容易帮助你。我刚刚更新了它,请看一看你好,谢谢你的回复。请问您在select id、value中所指的“值”是什么。我知道这是一个很难回答的问题,“id”和“value”是sql查询完成后返回的内容。我想Gordon想在这里用减号,所以把它改成减号,然后给它一个快照。很抱歉这么麻烦,但我真的不能完全得到你的答案。别误会我,这是我的错,我是个新手。你能再解释一下吗。您指的是什么值、t2.id和t.id?请原谅help@aashnisshah好的,我试试看。谢谢你的详细解释。@aashnissah我被卡住了,我应该在哪里或者如何获得这个值?我应该初始化它吗?从第2行之类的地方获取它。我可以直接测试标准SQL吗?因为我使用的是MySQL查询浏览器,我让你头疼,但请不要生气,t2和t的区别是什么?我应该如何把它作为一个查询浏览器。我的意思是我应该如何查询t2,我应该如何使t2引用表的第二个版本?请回答。慢慢来,再次感谢您的回复。我的意思是我应该如何查询t2,如何让t2引用表的第二个版本?谢谢你的帮助。希望你能再次回答。我明天回来,我会尽快告诉你最新情况。谢谢你抽出时间,晚安。
select id, minus,
   (id - coalesce((select sum(minus) from table t2 where t2.id < t.id), 0)) as newId