簡體   English   中英

根據同表 sql 和 php 另一列的更改更新表中的列值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM