簡體   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