Php 根据旧列向新的mySQL db表列中添加值

Php 根据旧列向新的mySQL db表列中添加值,php,mysql,Php,Mysql,大家好! 我对PHP和DBs有点陌生,所以我真的不知道如何从这个开始。 所以我想在一个数据库中做一个排序,其中ID差异太大。 (这意味着第一个ID以34开头,下一个是43,下一个是55等等) 我有一张看起来像上面那张桌子的桌子 现在我想做的是根据PID中的值更改列值中的值 这意味着,如果PID中的值等于1,则同一行上的值应为1001,下一行的值为1002,下一行的值为1003。 如果PID=2,则应将值更改为2001、2002、2003等。 这将是一个已经存在的表,但我也希望在每次向该表中添加新

大家好! 我对PHP和DBs有点陌生,所以我真的不知道如何从这个开始。 所以我想在一个数据库中做一个排序,其中ID差异太大。 (这意味着第一个ID以34开头,下一个是43,下一个是55等等)

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

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

这意味着,如果PID中的值等于1,则同一行上的值应为1001,下一行的值为1002,下一行的值为1003。 如果PID=2,则应将值更改为2001、2002、2003等。 这将是一个已经存在的表,但我也希望在每次向该表中添加新语句时都包含这些值。 因此,一个简单的签入伪代码:

如果PID等于1 然后检查值列中以“1”开头的最大数字 将其设为+1并将其添加到该行的列中

这可能吗? 你们会建议我做些什么(让事情变得更简单)? 如果你需要更多的信息,请告诉我,我会尽力更好地解释,我不知道我的解释是否说明了我要做的

先谢谢你

干杯,
K.

您可以使用
更新。。JOIN
并连接到包含每个
ID
的“秩”的派生表,并相应地更新:

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

这里的内部查询基本上是通过自连接对数据进行“排序”。它通过条件
s.pid=s2.pid和s.id>=s2.id
连接到它自身,换句话说,与包括我在内的我之前发生的
pid
相同,因此第一个将连接到1条记录,第二个连接到2条记录,依此类推。。然后您只需将
value
列更新为
pid*1000
,再加上排名。

您是否使用MySQLi或PDO进行数据库查询?您已经尝试过做什么了?对于sql来说,这太复杂了,您可以编写一个程序来处理“PID equal”逻辑,或者在mysqlan中使用过程。欢迎解释这是如何工作的:-)我添加了几个词@belletJuiceSQL比我想象的强大得多。所以在
p
表中,
cnt
将是当前记录加入的记录数?换句话说,如果5条记录具有
PID=1
,则具有最高
id
的记录将具有
cnt=5
,下一条
cnt=4
?是的,完全正确。这是一种在其他DBMS(如Oracle和SQL Server)中实现与
ROW\u NUMBER()
相同功能的方法。
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