繁体   English   中英

根据旧列将值添加到新的mySQL db表列中

[英]Adding values into a new mySQL db table column depending on an old column

  ID   |  PID  |    NAME   |  VALUE  |
-------------------------------------
  60   |   1   |   Test1   |  9999   |
  21   |   2   |   Test2   |  9999   |
  44   |   1   |   Test3   |  9999   |
  37   |   4   |   Test4   |  9999   |
  24   |   1   |   Test5   |  9999   |

大家好! 我是PHP和DB的新手,所以我真的不知道如何从这开始。 所以我想要在ID过多的DB中进行排序。 (这意味着第一个ID以34开头,下一个ID是43,接下来是55等)

我有一张看起来像上面那张桌子的桌子。

现在我想要做的是根据PID中的值更改VALUE列中的值。

这意味着如果在PID中值等于1,则同一行上的VALUE应变为1001,下一个值为1002,下一个1003.如果PID = 2,则VALUE应更改为2001然后2002年然后2003等。这将是一个已经存在的表,但我还希望每次在该表中添加新语句时都包含VALUE值。 所以简单检查伪代码:

如果PID等于1,则检查VALUE列以获得以“1”开头的最高编号,使其为+1并将其添加到该行的列中

这可能吗? 你们会建议我做些什么(让事情变得更容易)? 如果您需要进一步的信息,请告诉我,我会尝试更好地解释事情,我不知道我的解释是否说明了我要做的事情。

先感谢您。

干杯,K。

您可以使用UPDATE .. JOIN并加入包含每个ID的“rank”的派生表,并相应地更新:

UPDATE YourTable t
JOIN(SELECT s.ID,s.PID,COUNT(*) as cnt
     FROM YourTable s
     JOIN YourTable s2
      ON(s.pid = s2.pid AND s.id >= s2.id)) p
 ON(t.id = p.id)          
SET t.value = (1000*t.pid) + p.cnt

这里的内部查询基本上通过自联接“排列”数据。 它通过条件s.pid = s2.pid AND s.id >= s2.id连接到它自己,在单词中 - 包含我在我之前发生的相同PID ,所以第一个将加入到1个记录,第二个到两个等等..然后你只需将value列更新为pid*1000 ,加上等级。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM