[英]MySQL replace comma separated values in column with another table find old value to replace with new
[英]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.