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,而下一个中的VALUE应变为1002,下一个1003。 如果PID = 2,则VALUE应更改为2001年,然后是2002年,然后是2003年等。 这将是一个已经存在的表,但我还想在每次向该表添加一个新语句时包含VALUE值。 所以简单检查一下伪代码:
如果PID等于1 然后检查VALUE列,查看以" 1"开头的最高编号。 将它设为+1并将其添加到该行的列中
这可能吗? 你们会建议我做些什么(让事情变得更容易)? 如果您需要进一步的信息,请告诉我,我会尝试更好地解释,我不知道我的解释是否说明了我想要做的事情。
提前谢谢。
干杯, ķ。
答案 0 :(得分:1)
您可以使用UPDATE .. JOIN
并加入包含每个ID
的“排名”的派生表,并相应地更新:
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
,再加上排名。