Fra*_*ipe 5 mysql sql insert sql-update
我的数据库具有以下结构:
ID | text | time | valid
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码。我试图找到一种方法来做到这一点作为一个查询。
rows = select * from table where ID=x order by time desc;
n=0;
foreach rows{
if(n > 3){
update table set valid = -1 where rows[n];
}
n++
}
Run Code Online (Sandbox Code Playgroud)
我正在检查给定 ID 存在多少行。然后我需要为 n > 3 的所有行设置 valid=-1;
有没有办法通过一个查询来做到这一点?
您可以在WHERE子句中使用子查询,如下所示:
UPDATE table
SET valid=-1
WHERE (
SELECT COUNT(*)
FROM table tt
WHERE tt.time > table.time
AND tt.ID = table.ID
) > 3
Run Code Online (Sandbox Code Playgroud)
子查询计算具有相同 ID 和稍后时间的行。对于最近的三行,此计数将为三或更少;其余的将有更大的计数,因此它们的valid字段将被更新。
假设(id,time)有一个UNIQUE约束,即没有两行具有相同id和相同time:
UPDATE
tableX AS tu
JOIN
( SELECT time
FROM tableX
WHERE id = @X -- the given ID
ORDER BY time DESC
LIMIT 1 OFFSET 2
) AS t3
ON tu.id = @X -- given ID again
AND tu.time < t3.time
SET
tu.valid = -1 ;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8068 次 |
| 最近记录: |