![](/img/trans.png)
[英]Update table column with another column values of the same table using updateAll()
[英]Update column values in table based on changes on another column same table sql and php
如果我有如下表格
Id value
1 35
2 20
3 10
如果值 10 更改為 45,那么它將是值列中的最大值,因為需要將 id 更改為 1 而不是 3,如下面的 php
Id value
2 35
3 20
1 45
注意:這里的目的是根據 value 列上的值從高值到低值重新排序 id
非常感謝
我在值列和 select 最大值上嘗試了一個 for 循環,然后將 id 更新為 1 但唯一發生在一列上的更改需要對所有值列進行更改
您可以使用初始 state 制作這樣的表,並擁有一個主鍵以使更新更容易。
CREATE TABLE t (
`id` INT NOT NULL AUTO_INCREMENT,
val int,
PRIMARY KEY (`id`)
);
然后加載你的數據
INSERT INTO t(val)
VALUES(30),(20),(10);
並使用這樣的查詢(mySQL 8 或更高版本)
SELECT id,val, RANK() OVER (order by val DESC) the_rank FROM t;
得到結果
id val the_rank
1 30 1
2 20 2
3 10 3
請注意the_rank
列與id
相同
然后將 id=3 的值改為 45
UPDATE t SET val =45 WHERE id = 3;
然后會顯示一個簡單的 select
id val
1 30
2 20
3 45
現在使用查詢,動態獲取排名
SELECT id,val, RANK() OVER (order by val DESC) the_rank FROM t;
結果是
id val the_rank
3 45 1
2 30 2
1 20 3
請注意您的id
仍然完好無損,但排名是動態完成的
顯示您實際上不需要更改id
列值,您可以在查詢中動態完成所有操作。 事實上, id
列幾乎是無關緊要的,除了它使行中的更新更容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.