【问题标题】:mysql insert into functionmysql插入函数
【发布时间】:2014-04-21 18:52:33
【问题描述】:

我正在使用 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);}
    }

类似的,我还是决策循环的新手。如果您能修复我的循环,我将不胜感激。我是这个社区的新手,恳请您的理解。

【问题讨论】:

  • 你能分享你到目前为止尝试过的代码吗?如果我们知道您的尝试,我们会更容易为您提供帮助。
  • 我刚刚更新了,请看一下

标签: php mysql loops for-loop dml


【解决方案1】:

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

【讨论】:

  • 您好,感谢您的回复。请问您在 select id, value 中所指的“价值”是什么?我知道这是一个非常菜鸟的问题,抱歉
  • 'id' 和 'value' 是 sql 查询运行完成后将返回的内容。我认为 Gordon 的意思是在其中使用减号,所以将其更改为“减号”并试一试
  • 抱歉打扰了,但我真的无法完全得到您的答案。不要误会我的意思,这是我的错,我是新手。你能再解释一下吗。你指的是什么“价值”和“t2.id”和“t.id”?请帮忙
  • @aashnisshah 好的,我试试看。感谢您的详细说明。
  • @aashnisshah 我被卡住了,我应该在哪里或如何获得该值?我应该初始化它,从行中获取它吗?
【解决方案2】:

您可以按如下方式使用 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,表示您希望在查询完成后返回idminus 的值。

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

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

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

【讨论】:

  • 2.我可以直接测试标准 SQL 吗?因为我正在使用 MySQL 查询浏览器
  • 我很头疼但请不要生气,t2和t有什么区别?我应该如何把它放在一个查询浏览器中。
  • 我的意思是我应该如何查询t2,我怎样才能让t2引用第二个版本的表?
  • 请回答。慢慢来
  • 再次感谢您的回复。我的意思是我应该如何查询 t2,我怎样才能让 t2 引用表的第二个版本?感谢您的所有帮助。希望你再回答。我明天会回来,我会尽快更新你。谢谢你的时间,晚安。
猜你喜欢
  • 2023-03-16
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 2019-08-08
相关资源
最近更新 更多